--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
sbapp/main.py 19d41a182d2e3555dd0dfa2fb4281f7ca17e8e6b (19d41a18) Text, 65.27 KB
Te6edf3__debug_build__ Tff7b72= Tff7b72True
Te6edf3__disable_shaders__ Tff7b72= Tff7b72True
Te6edf3__version__ Tff7b72= Ta5d6ff"Ta5d6ff0.2.2Ta5d6ff"
Te6edf3__variant__ Tff7b72= Ta5d6ff"Ta5d6ffbetaTa5d6ff"
Tff7b72import T7ee787sys
Tff7b72import T7ee787argparse
Te6edf3parser Tff7b72= Te6edf3argparseTff7b72.Td2a8ffArgumentParserTb4b4b4(Te6edf3descriptionTff7b72=Ta5d6ff"Ta5d6ffReticulum Network Stack DaemonTa5d6ff"Tb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff-vTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff--verboseTa5d6ff"Tb4b4b4, Te6edf3actionTff7b72=Ta5d6ff'Ta5d6ffstore_trueTa5d6ff'Tb4b4b4, Te6edf3defaultTff7b72=Tff7b72FalseTb4b4b4, Te6edf3helpTff7b72=Ta5d6ff"Ta5d6ffincrease logging verbosityTa5d6ff"Tb4b4b4)
Te6edf3parserTff7b72.Td2a8ffadd_argumentTb4b4b4(Ta5d6ff"Ta5d6ff--versionTa5d6ff"Tb4b4b4, Te6edf3actionTff7b72=Ta5d6ff"Ta5d6ffversionTa5d6ff"Tb4b4b4, Te6edf3versionTff7b72=Ta5d6ff"Ta5d6ffsideband Tffd700{version}Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3versionTff7b72=Te6edf3__version__Tb4b4b4)Tb4b4b4)
Te6edf3args Tff7b72= Te6edf3parserTff7b72.Td2a8ffparse_argsTb4b4b4(Tb4b4b4)
Te6edf3sysTff7b72.Td2a8ffargv Tff7b72= Tb4b4b4[Te6edf3sysTff7b72.Td2a8ffargvTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4]
Tff7b72import T7ee787RNS
Tff7b72import T7ee787LXMF
Tff7b72import T7ee787time
Tff7b72import T7ee787os
Tff7b72import T7ee787plyer
Tff7b72import T7ee787base64
Tff7b72import T7ee787threading
Tff7b72from T7ee787kivyT7ee787.T7ee787logger Tff7b72import Te6edf3LoggerTb4b4b4, Te6edf3LOG_LEVELS
Tff7b72if Te6edf3__debug_build__ Tff7b72or Te6edf3argsTff7b72.Td2a8ffverboseTb4b4b4:
Te6edf3LoggerTff7b72.Td2a8ffsetLevelTb4b4b4(Te6edf3LOG_LEVELSTb4b4b4[Ta5d6ff"Ta5d6ffdebugTa5d6ff"Tb4b4b4]Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3LoggerTff7b72.Td2a8ffsetLevelTb4b4b4(Te6edf3LOG_LEVELSTb4b4b4[Ta5d6ff"Ta5d6fferrorTa5d6ff"Tb4b4b4]Tb4b4b4)
Tff7b72if Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffget_platformTb4b4b4(Tb4b4b4) Tff7b72!= Ta5d6ff"Ta5d6ffandroidTa5d6ff"Tb4b4b4:
Te6edf3local Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffdirnameTb4b4b4(Tff7b72__file__Tb4b4b4)
Te6edf3sysTff7b72.Td2a8ffpathTff7b72.Td2a8ffappendTb4b4b4(Te6edf3localTb4b4b4)
Tff7b72from T7ee787kivymdT7ee787.T7ee787app Tff7b72import Te6edf3MDApp
Tff7b72from T7ee787kivyT7ee787.T7ee787coreT7ee787.T7ee787window Tff7b72import Te6edf3Window
Tff7b72from T7ee787kivyT7ee787.T7ee787coreT7ee787.T7ee787clipboard Tff7b72import Te6edf3Clipboard
Tff7b72from T7ee787kivyT7ee787.T7ee787base Tff7b72import Te6edf3EventLoop
Tff7b72from T7ee787kivyT7ee787.T7ee787clock Tff7b72import Te6edf3Clock
Tff7b72from T7ee787kivyT7ee787.T7ee787langT7ee787.T7ee787builder Tff7b72import Te6edf3Builder
Tff7b72from T7ee787kivyT7ee787.T7ee787effectsT7ee787.T7ee787scroll Tff7b72import Te6edf3ScrollEffect
Tff7b72from T7ee787kivyT7ee787.T7ee787uixT7ee787.T7ee787screenmanager Tff7b72import Te6edf3ScreenManager
Tff7b72from T7ee787kivyT7ee787.T7ee787uixT7ee787.T7ee787screenmanager Tff7b72import Te6edf3FadeTransitionTb4b4b4, Te6edf3NoTransition
Tff7b72from T7ee787kivyT7ee787.T7ee787effectsT7ee787.T7ee787dampedscroll Tff7b72import Te6edf3DampedScrollEffect
Tff7b72if Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffget_platformTb4b4b4(Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffandroidTa5d6ff"Tb4b4b4:
Tff7b72from T7ee787sidebandT7ee787.T7ee787core Tff7b72import Te6edf3SidebandCore
Tff7b72from T7ee787uiT7ee787.T7ee787layouts Tff7b72import Te6edf3root_layout
Tff7b72from T7ee787uiT7ee787.T7ee787conversations Tff7b72import Te6edf3ConversationsTb4b4b4, Te6edf3MsgSyncTb4b4b4, Te6edf3NewConv
Tff7b72from T7ee787uiT7ee787.T7ee787announces Tff7b72import Te6edf3Announces
Tff7b72from T7ee787uiT7ee787.T7ee787messages Tff7b72import Te6edf3MessagesTb4b4b4, Te6edf3ts_format
Tff7b72from T7ee787uiT7ee787.T7ee787helpers Tff7b72import Te6edf3ContentNavigationDrawerTb4b4b4, Te6edf3DrawerListTb4b4b4, Te6edf3IconListItem
Tff7b72from T7ee787jnius Tff7b72import Te6edf3cast
Tff7b72from T7ee787jnius Tff7b72import Te6edf3autoclass
Tff7b72from T7ee787android Tff7b72import Te6edf3mActivity
Tff7b72from T7ee787androidT7ee787.T7ee787permissions Tff7b72import Te6edf3request_permissionsTb4b4b4, Te6edf3check_permission
Tff7b72from T7ee787kivymdT7ee787.T7ee787utilsT7ee787.T7ee787set_bars_colors Tff7b72import Te6edf3set_bars_colors
Tff7b72elseTb4b4b4:
Tff7b72from T7ee787.T7ee787sidebandT7ee787.T7ee787core Tff7b72import Te6edf3SidebandCore
Tff7b72from T7ee787.T7ee787uiT7ee787.T7ee787layouts Tff7b72import Te6edf3root_layout
Tff7b72from T7ee787.T7ee787uiT7ee787.T7ee787conversations Tff7b72import Te6edf3ConversationsTb4b4b4, Te6edf3MsgSyncTb4b4b4, Te6edf3NewConv
Tff7b72from T7ee787.T7ee787uiT7ee787.T7ee787announces Tff7b72import Te6edf3Announces
Tff7b72from T7ee787.T7ee787uiT7ee787.T7ee787messages Tff7b72import Te6edf3MessagesTb4b4b4, Te6edf3ts_format
Tff7b72from T7ee787.T7ee787uiT7ee787.T7ee787helpers Tff7b72import Te6edf3ContentNavigationDrawerTb4b4b4, Te6edf3DrawerListTb4b4b4, Te6edf3IconListItem
Tff7b72from T7ee787kivyT7ee787.T7ee787metrics Tff7b72import Te6edf3dp
Tff7b72from T7ee787kivymdT7ee787.T7ee787uixT7ee787.T7ee787button Tff7b72import Te6edf3MDFlatButton
Tff7b72from T7ee787kivymdT7ee787.T7ee787uixT7ee787.T7ee787dialog Tff7b72import Te6edf3MDDialog
Te6edf3dark_theme_text_color Tff7b72= Ta5d6ff"Ta5d6ffdddTa5d6ff"
Tff7b72if Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffget_platformTb4b4b4(Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffandroidTa5d6ff"Tb4b4b4:
Tff7b72from T7ee787jnius Tff7b72import Te6edf3autoclass
Tff7b72from T7ee787androidT7ee787.T7ee787runnable Tff7b72import Te6edf3run_on_ui_thread
Tff7b72class T56d364SidebandAppTb4b4b4(Te6edf3MDAppTb4b4b4)Tb4b4b4:
Te6edf3STARTING Tff7b72= T79c0ff0x00
Te6edf3ACTIVE Tff7b72= T79c0ff0x01
Te6edf3PAUSED Tff7b72= T79c0ff0x02
Te6edf3STOPPING Tff7b72= T79c0ff0x03
Te6edf3PKGNAME Tff7b72= Ta5d6ff"Ta5d6ffio.unsigned.sidebandTa5d6ff"
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)Tb4b4b4:
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ff__init__Tb4b4b4(Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)
Tff7b72selfTff7b72.Td2a8fftitle Tff7b72= Ta5d6ff"Ta5d6ffSidebandTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffapp_state Tff7b72= Te6edf3SidebandAppTff7b72.Td2a8ffSTARTING
Tff7b72selfTff7b72.Td2a8ffandroid_service Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffapp_dir Tff7b72= Te6edf3plyerTff7b72.Td2a8ffstoragepathTff7b72.Td2a8ffget_application_dirTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffshaders_disabled Tff7b72= Te6edf3__disable_shaders__
Tff7b72if Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffget_platformTb4b4b4(Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffandroidTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsideband Tff7b72= Te6edf3SidebandCoreTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3is_clientTff7b72=Tff7b72TrueTb4b4b4, Te6edf3android_app_dirTff7b72=Tff7b72selfTff7b72.Td2a8ffapp_dirTb4b4b4, Te6edf3verboseTff7b72=Te6edf3__debug_build__Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsideband Tff7b72= Te6edf3SidebandCoreTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3is_clientTff7b72=Tff7b72FalseTb4b4b4, Te6edf3verboseTff7b72=Tb4b4b4(Te6edf3argsTff7b72.Td2a8ffverbose Tff7b72or Te6edf3__debug_build__Tb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffset_ui_themeTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffconversations_view Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffsync_dialog Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffsettings_ready Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffconnectivity_ready Tff7b72= Tff7b72False
Te6edf3WindowTff7b72.Td2a8ffsoftinput_mode Tff7b72= Ta5d6ff"Ta5d6ffbelow_targetTa5d6ff"
Tff7b72selfTff7b72.Td2a8fficon Tff7b72= Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffasset_dirTff7b72+Ta5d6ff"Ta5d6ff/icon.pngTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffnotification_icon Tff7b72= Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffasset_dirTff7b72+Ta5d6ff"Ta5d6ff/notification_icon.pngTa5d6ff"
Tff7b72def Td2a8ffstart_coreTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3dtTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffcheck_permissionsTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffstart_serviceTb4b4b4(Tb4b4b4)
Te6edf3ClockTff7b72.Td2a8ffschedule_intervalTb4b4b4(Tff7b72selfTff7b72.Td2a8ffjobsTb4b4b4, T79c0ff1Tb4b4b4)
Tff7b72def Td2a8ffdismiss_splashTb4b4b4(Te6edf3dtTb4b4b4)Tb4b4b4:
Tff7b72from T7ee787android Tff7b72import Te6edf3loadingscreen
Te6edf3loadingscreenTff7b72.Td2a8ffhide_loading_screenTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffget_platformTb4b4b4(Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffandroidTa5d6ff"Tb4b4b4:
Te6edf3ClockTff7b72.Td2a8ffschedule_onceTb4b4b4(Te6edf3dismiss_splashTb4b4b4, T79c0ff0Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffapp.loadedTa5d6ff"Tb4b4b4, Tff7b72TrueTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffapp.runningTa5d6ff"Tb4b4b4, Tff7b72TrueTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffapp.foregroundTa5d6ff"Tb4b4b4, Tff7b72TrueTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8fffirst_runTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffguide_actionTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8fffpTb4b4b4(Te6edf3delta_timeTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffrequest_permissionsTb4b4b4(Tb4b4b4)
Te6edf3ClockTff7b72.Td2a8ffschedule_onceTb4b4b4(Te6edf3fpTb4b4b4, T79c0ff3Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffopen_conversationsTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffset_bars_colorsTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffapp_state Tff7b72= Te6edf3SidebandAppTff7b72.Td2a8ffACTIVE
Tff7b72def Td2a8ffstart_serviceTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffLaunching platform-specific service for RNS and LXMFTa5d6ff"Tb4b4b4)
Tff7b72if Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffget_platformTb4b4b4(Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffandroidTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffandroid_service Tff7b72= Te6edf3autoclassTb4b4b4(Ta5d6ff'Ta5d6ffio.unsigned.sideband.ServiceSidebandserviceTa5d6ff'Tb4b4b4)
Te6edf3mActivity Tff7b72= Te6edf3autoclassTb4b4b4(Ta5d6ff'Ta5d6fforg.kivy.android.PythonActivityTa5d6ff'Tb4b4b4)Tff7b72.Td2a8ffmActivity
Te6edf3argument Tff7b72= Tff7b72selfTff7b72.Td2a8ffapp_dir
Tff7b72selfTff7b72.Td2a8ffandroid_serviceTff7b72.Td2a8ffstartTb4b4b4(Te6edf3mActivityTb4b4b4, Te6edf3argumentTb4b4b4)
T8b949e# Wait a little extra for user to react to permissions prompt
Tff7b72if Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8fffirst_runTb4b4b4:
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(T79c0ff6Tb4b4b4)
T8b949e# Wait for service to become available
Tff7b72while Tff7b72not Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffservice_availableTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(T79c0ff0.20Tb4b4b4)
T8b949e# Start local core instance
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffstartTb4b4b4(Tb4b4b4)
T8b949e# Pre-load announce stream widgets
Tff7b72selfTff7b72.Td2a8ffinit_announces_viewTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffannounces_viewTff7b72.Td2a8ffupdateTb4b4b4(Tb4b4b4)
T8b949e#################################################
T8b949e# General helpers #
T8b949e#################################################
Tff7b72def Td2a8ffset_ui_themeTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8fftheme_clsTff7b72.Td2a8ffmaterial_style Tff7b72= Ta5d6ff"Ta5d6ffM3Ta5d6ff"
Tff7b72selfTff7b72.Td2a8fftheme_clsTff7b72.Td2a8ffwidget_style Tff7b72= Ta5d6ff"Ta5d6ffandroidTa5d6ff"
Tff7b72selfTff7b72.Td2a8fftheme_clsTff7b72.Td2a8ffprimary_palette Tff7b72= Ta5d6ff"Ta5d6ffBlueGrayTa5d6ff"
Tff7b72selfTff7b72.Td2a8fftheme_clsTff7b72.Td2a8ffaccent_palette Tff7b72= Ta5d6ff"Ta5d6ffOrangeTa5d6ff"
Tff7b72if Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffdark_uiTa5d6ff"Tb4b4b4]Tb4b4b4:
Tff7b72selfTff7b72.Td2a8fftheme_clsTff7b72.Td2a8fftheme_style Tff7b72= Ta5d6ff"Ta5d6ffDarkTa5d6ff"
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8fftheme_clsTff7b72.Td2a8fftheme_style Tff7b72= Ta5d6ff"Ta5d6ffLightTa5d6ff"
Tff7b72def Td2a8ffupdate_ui_themeTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffdark_uiTa5d6ff"Tb4b4b4]Tb4b4b4:
Tff7b72selfTff7b72.Td2a8fftheme_clsTff7b72.Td2a8fftheme_style Tff7b72= Ta5d6ff"Ta5d6ffDarkTa5d6ff"
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8fftheme_clsTff7b72.Td2a8fftheme_style Tff7b72= Ta5d6ff"Ta5d6ffLightTa5d6ff"
Te6edf3st Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffRecursing widgets...Ta5d6ff"Tb4b4b4)
Tff7b72for Te6edf3wid Tff7b72in Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffFound: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3widTb4b4b4)Tff7b72+Tffa657strTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTb4b4b4[Te6edf3widTb4b4b4]Tb4b4b4)Tb4b4b4)
Tff7b72def Td2a8ffset_bars_colorsTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffget_platformTb4b4b4(Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffandroidTa5d6ff"Tb4b4b4:
Te6edf3set_bars_colorsTb4b4b4(
Tff7b72selfTff7b72.Td2a8fftheme_clsTff7b72.Td2a8ffprimary_colorTb4b4b4, T8b949e# status bar color
Tb4b4b4[T79c0ff0Tb4b4b4,T79c0ff0Tb4b4b4,T79c0ff0Tb4b4b4,T79c0ff0Tb4b4b4]Tb4b4b4, T8b949e# navigation bar color
Ta5d6ff"Ta5d6ffLightTa5d6ff"Tb4b4b4, T8b949e# icons color of status bar
Tb4b4b4)
Tff7b72def Td2a8ffshare_textTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3textTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffget_platformTb4b4b4(Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffandroidTa5d6ff"Tb4b4b4:
Te6edf3Intent Tff7b72= Te6edf3autoclassTb4b4b4(Ta5d6ff'Ta5d6ffandroid.content.IntentTa5d6ff'Tb4b4b4)
Te6edf3JString Tff7b72= Te6edf3autoclassTb4b4b4(Ta5d6ff'Ta5d6ffjava.lang.StringTa5d6ff'Tb4b4b4)
Te6edf3shareIntent Tff7b72= Te6edf3IntentTb4b4b4(Tb4b4b4)
Te6edf3shareIntentTff7b72.Td2a8ffsetActionTb4b4b4(Te6edf3IntentTff7b72.Td2a8ffACTION_SENDTb4b4b4)
Te6edf3shareIntentTff7b72.Td2a8ffsetTypeTb4b4b4(Ta5d6ff"Ta5d6fftext/plainTa5d6ff"Tb4b4b4)
Te6edf3shareIntentTff7b72.Td2a8ffputExtraTb4b4b4(Te6edf3IntentTff7b72.Td2a8ffEXTRA_TEXTTb4b4b4, Te6edf3JStringTb4b4b4(Te6edf3textTb4b4b4)Tb4b4b4)
Te6edf3mActivityTff7b72.Td2a8ffstartActivityTb4b4b4(Te6edf3shareIntentTb4b4b4)
Tff7b72def Td2a8ffon_pauseTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffApp pausing...Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffapp.runningTa5d6ff"Tb4b4b4, Tff7b72TrueTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffapp.foregroundTa5d6ff"Tb4b4b4, Tff7b72FalseTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffapp_state Tff7b72= Te6edf3SidebandAppTff7b72.Td2a8ffPAUSED
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffshould_persist_dataTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconversations_view Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconversations_scrollviewTff7b72.Td2a8ffeffect_cls Tff7b72= Te6edf3ScrollEffect
Tff7b72selfTff7b72.Td2a8ffconversations_viewTff7b72.Td2a8ffupdateTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconversations_scrollviewTff7b72.Td2a8ffscroll Tff7b72= T79c0ff1
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffApp pausedTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72return Tff7b72True
Tff7b72def Td2a8ffon_resumeTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffApp resuming...Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffapp.runningTa5d6ff"Tb4b4b4, Tff7b72TrueTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffapp.foregroundTa5d6ff"Tb4b4b4, Tff7b72TrueTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffwants.clear_notificationsTa5d6ff"Tb4b4b4, Tff7b72TrueTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffapp_state Tff7b72= Te6edf3SidebandAppTff7b72.Td2a8ffACTIVE
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconversations_view Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconversations_scrollviewTff7b72.Td2a8ffeffect_cls Tff7b72= Te6edf3ScrollEffect
Tff7b72selfTff7b72.Td2a8ffconversations_viewTff7b72.Td2a8ffupdateTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconversations_scrollviewTff7b72.Td2a8ffscroll Tff7b72= T79c0ff1
Tff7b72elseTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffConversations view did not existTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffApp resumed...Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72def Td2a8ffon_stopTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffApp stopping...Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffapp.runningTa5d6ff"Tb4b4b4, Tff7b72FalseTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffapp.foregroundTa5d6ff"Tb4b4b4, Tff7b72FalseTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffapp_state Tff7b72= Te6edf3SidebandAppTff7b72.Td2a8ffSTOPPING
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffApp stoppedTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72def Td2a8ffis_in_foregroundTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffapp_state Tff7b72== Te6edf3SidebandAppTff7b72.Td2a8ffACTIVETb4b4b4:
Tff7b72return Tff7b72True
Tff7b72elseTb4b4b4:
Tff7b72return Tff7b72False
Tff7b72def Td2a8ffcheck_permissionsTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffget_platformTb4b4b4(Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffandroidTa5d6ff"Tb4b4b4:
Te6edf3mActivity Tff7b72= Te6edf3autoclassTb4b4b4(Ta5d6ff'Ta5d6fforg.kivy.android.PythonActivityTa5d6ff'Tb4b4b4)Tff7b72.Td2a8ffmActivity
Te6edf3Context Tff7b72= Te6edf3autoclassTb4b4b4(Ta5d6ff'Ta5d6ffandroid.content.ContextTa5d6ff'Tb4b4b4)
Te6edf3NotificationManager Tff7b72= Te6edf3autoclassTb4b4b4(Ta5d6ff'Ta5d6ffandroid.app.NotificationManagerTa5d6ff'Tb4b4b4)
Te6edf3notification_service Tff7b72= Te6edf3castTb4b4b4(Te6edf3NotificationManagerTb4b4b4, Te6edf3mActivityTff7b72.Td2a8ffgetSystemServiceTb4b4b4(Te6edf3ContextTff7b72.Td2a8ffNOTIFICATION_SERVICETb4b4b4)Tb4b4b4)
Tff7b72if Te6edf3notification_serviceTff7b72.Td2a8ffareNotificationsEnabledTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffsetpersistentTb4b4b4(Ta5d6ff"Ta5d6ffpermissions.notificationsTa5d6ff"Tb4b4b4, Tff7b72TrueTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72if Te6edf3check_permissionTb4b4b4(Ta5d6ff"Ta5d6ffandroid.permission.POST_NOTIFICATIONSTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffHave notification permissionsTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffsetpersistentTb4b4b4(Ta5d6ff"Ta5d6ffpermissions.notificationsTa5d6ff"Tb4b4b4, Tff7b72TrueTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffDo not have notification permissionsTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffsetpersistentTb4b4b4(Ta5d6ff"Ta5d6ffpermissions.notificationsTa5d6ff"Tb4b4b4, Tff7b72FalseTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffsetpersistentTb4b4b4(Ta5d6ff"Ta5d6ffpermissions.notificationsTa5d6ff"Tb4b4b4, Tff7b72TrueTb4b4b4)
Tff7b72def Td2a8ffrequest_permissionsTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffrequest_notifications_permissionTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffrequest_notifications_permissionTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffget_platformTb4b4b4(Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffandroidTa5d6ff"Tb4b4b4:
Tff7b72if Tff7b72not Te6edf3check_permissionTb4b4b4(Ta5d6ff"Ta5d6ffandroid.permission.POST_NOTIFICATIONSTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffRequesting notification permissionTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3request_permissionsTb4b4b4(Tb4b4b4[Ta5d6ff"Ta5d6ffandroid.permission.POST_NOTIFICATIONSTa5d6ff"Tb4b4b4]Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffcheck_permissionsTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffbuildTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3FONT_PATH Tff7b72= Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffasset_dirTff7b72+Ta5d6ff"Ta5d6ff/fontsTa5d6ff"
Tff7b72if Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffis_darwinTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8fficon Tff7b72= Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffasset_dirTff7b72+Ta5d6ff"Ta5d6ff/icon_macos_formed.pngTa5d6ff"
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8fficon Tff7b72= Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffasset_dirTff7b72+Ta5d6ff"Ta5d6ff/icon.pngTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffannounces_view Tff7b72= Tff7b72None
Te6edf3screen Tff7b72= Te6edf3BuilderTff7b72.Td2a8ffload_stringTb4b4b4(Te6edf3root_layoutTb4b4b4)
Tff7b72return Te6edf3screen
Tff7b72def Td2a8ffjobsTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3delta_timeTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8ffcurrent Tff7b72== Ta5d6ff"Ta5d6ffmessages_screenTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffmessages_viewTff7b72.Td2a8ffupdateTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffmessages_scrollviewTff7b72.Td2a8ffdest_knownTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffmessage_area_detectTb4b4b4(Tb4b4b4)
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8ffcurrent Tff7b72== Ta5d6ff"Ta5d6ffconversations_screenTa5d6ff"Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffgetstateTb4b4b4(Ta5d6ff"Ta5d6ffapp.flags.unread_conversationsTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconversations_view Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconversations_viewTff7b72.Td2a8ffupdateTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffgetstateTb4b4b4(Ta5d6ff"Ta5d6ffapp.flags.lxmf_sync_dialog_openTa5d6ff"Tb4b4b4) Tff7b72and Tff7b72selfTff7b72.Td2a8ffsync_dialog Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsync_dialogTff7b72.Td2a8ffidsTff7b72.Td2a8ffsync_progressTff7b72.Td2a8ffvalue Tff7b72= Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffget_sync_progressTb4b4b4(Tb4b4b4)Tff7b72*T79c0ff100
Tff7b72selfTff7b72.Td2a8ffsync_dialogTff7b72.Td2a8ffidsTff7b72.Td2a8ffsync_statusTff7b72.Td2a8fftext Tff7b72= Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffget_sync_statusTb4b4b4(Tb4b4b4)
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8ffcurrent Tff7b72== Ta5d6ff"Ta5d6ffannounces_screenTa5d6ff"Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffgetstateTb4b4b4(Ta5d6ff"Ta5d6ffapp.flags.new_announcesTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffannounces_view Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffannounces_viewTff7b72.Td2a8ffupdateTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffgetstateTb4b4b4(Ta5d6ff"Ta5d6ffapp.flags.new_conversationsTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffconversations_view Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconversations_viewTff7b72.Td2a8ffupdateTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffon_startTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8fflast_exit_event Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8fftransitionTff7b72.Td2a8ffduration Tff7b72= T79c0ff0.25
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8fftransitionTff7b72.Td2a8ffbindTb4b4b4(Te6edf3on_completeTff7b72=Tff7b72selfTff7b72.Td2a8ffscreen_transition_completeTb4b4b4)
Te6edf3EventLoopTff7b72.Td2a8ffwindowTff7b72.Td2a8ffbindTb4b4b4(Te6edf3on_keyboardTff7b72=Tff7b72selfTff7b72.Td2a8ffkeyboard_eventTb4b4b4)
Te6edf3EventLoopTff7b72.Td2a8ffwindowTff7b72.Td2a8ffbindTb4b4b4(Te6edf3on_key_downTff7b72=Tff7b72selfTff7b72.Td2a8ffkeydown_eventTb4b4b4)
T8b949e# This incredibly hacky hack circumvents a bug in SDL2
T8b949e# that prevents focus from being correctly released from
T8b949e# the software keyboard on Android. Without this the back
T8b949e# button/gesture does not work after the soft-keyboard has
T8b949e# appeared for the first time.
Tff7b72if Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffget_platformTb4b4b4(Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffandroidTa5d6ff"Tb4b4b4:
Te6edf3BIND_CLASSES Tff7b72= Tb4b4b4[Ta5d6ff"Ta5d6ffkivymd.uix.textfield.textfield.MDTextFieldTa5d6ff"Tb4b4b4,Tb4b4b4]
Tff7b72for Te6edf3e Tff7b72in Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTb4b4b4:
Te6edf3te Tff7b72= Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTb4b4b4[Te6edf3eTb4b4b4]
Te6edf3ts Tff7b72= Tffa657strTb4b4b4(Te6edf3teTb4b4b4)Tff7b72.Td2a8ffsplitTb4b4b4(Ta5d6ff"Ta5d6ff Ta5d6ff"Tb4b4b4)Tb4b4b4[T79c0ff0Tb4b4b4]Tff7b72.Td2a8ffreplaceTb4b4b4(Ta5d6ff"Ta5d6ff<Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tff7b72if Te6edf3ts Tff7b72in Te6edf3BIND_CLASSESTb4b4b4:
Te6edf3teTff7b72.Td2a8ffbindTb4b4b4(Te6edf3focusTff7b72=Tff7b72selfTff7b72.Td2a8ffandroid_focus_fixTb4b4b4)
T8b949e# RNS.log("Bound "+str(e)+" / "+ts)
T8b949e# else:
T8b949e# RNS.log("Did not bind "+str(e)+" / "+ts)
T8b949e# RNS.log(str(e))
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8ffapp Tff7b72= Tff7b72self
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffapp_version_infoTff7b72.Td2a8fftext Tff7b72= Ta5d6ff"Ta5d6ffSideband vTa5d6ff"Tff7b72+Te6edf3__version__Tff7b72+Ta5d6ff"Ta5d6ff Ta5d6ff"Tff7b72+Te6edf3__variant__
Te6edf3ClockTff7b72.Td2a8ffschedule_onceTb4b4b4(Tff7b72selfTff7b72.Td2a8ffstart_coreTb4b4b4, T79c0ff3.5Tb4b4b4)
T8b949e# Part of the focus hack fix
Tff7b72def Td2a8ffandroid_focus_fixTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTb4b4b4, Te6edf3valTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Te6edf3valTb4b4b4:
Tf0883e@run_on_ui_thread
Tff7b72def Td2a8fffix_back_buttonTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3activity Tff7b72= Te6edf3autoclassTb4b4b4(Ta5d6ff'Ta5d6fforg.kivy.android.PythonActivityTa5d6ff'Tb4b4b4)Tff7b72.Td2a8ffmActivity
Te6edf3activityTff7b72.Td2a8ffonWindowFocusChangedTb4b4b4(Tff7b72FalseTb4b4b4)
Te6edf3activityTff7b72.Td2a8ffonWindowFocusChangedTb4b4b4(Tff7b72TrueTb4b4b4)
Te6edf3fix_back_buttonTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffkeydown_eventTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3instanceTb4b4b4, Te6edf3keyboardTb4b4b4, Te6edf3keycodeTb4b4b4, Te6edf3textTb4b4b4, Te6edf3modifiersTb4b4b4)Tb4b4b4:
Tff7b72if Tffa657lenTb4b4b4(Te6edf3modifiersTb4b4b4) Tff7b72> T79c0ff0 Tff7b72and Te6edf3modifiersTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72== Ta5d6ff'Ta5d6ffctrlTa5d6ff' Tff7b72and Tb4b4b4(Te6edf3text Tff7b72== Ta5d6ff"Ta5d6ffwTa5d6ff" Tff7b72or Te6edf3text Tff7b72== Ta5d6ff"Ta5d6ffqTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffquit_actionTb4b4b4(Tff7b72selfTb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3modifiersTb4b4b4) Tff7b72> T79c0ff0 Tff7b72and Te6edf3modifiersTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72== Ta5d6ff'Ta5d6ffctrlTa5d6ff' Tff7b72and Tb4b4b4(Te6edf3text Tff7b72== Ta5d6ff"Ta5d6ffsTa5d6ff" Tff7b72or Te6edf3text Tff7b72== Ta5d6ff"Ta5d6ffdTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8ffcurrent Tff7b72== Ta5d6ff"Ta5d6ffmessages_screenTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffmessage_send_actionTb4b4b4(Tb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3modifiersTb4b4b4) Tff7b72> T79c0ff0 Tff7b72and Te6edf3modifiersTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72== Ta5d6ff'Ta5d6ffctrlTa5d6ff' Tff7b72and Tb4b4b4(Te6edf3text Tff7b72== Ta5d6ff"Ta5d6fflTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffannounces_actionTb4b4b4(Tff7b72selfTb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3modifiersTb4b4b4) Tff7b72> T79c0ff0 Tff7b72and Te6edf3modifiersTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72== Ta5d6ff'Ta5d6ffctrlTa5d6ff' Tff7b72and Tb4b4b4(Te6edf3text Tff7b72== Ta5d6ff"Ta5d6ffrTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconversations_actionTb4b4b4(Tff7b72selfTb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3modifiersTb4b4b4) Tff7b72> T79c0ff0 Tff7b72and Te6edf3modifiersTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72== Ta5d6ff'Ta5d6ffctrlTa5d6ff' Tff7b72and Tb4b4b4(Te6edf3text Tff7b72== Ta5d6ff"Ta5d6ffgTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffguide_actionTb4b4b4(Tff7b72selfTb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3modifiersTb4b4b4) Tff7b72> T79c0ff0 Tff7b72and Te6edf3modifiersTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72== Ta5d6ff'Ta5d6ffctrlTa5d6ff' Tff7b72and Tb4b4b4(Te6edf3text Tff7b72== Ta5d6ff"Ta5d6ffnTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8ffcurrent Tff7b72== Ta5d6ff"Ta5d6ffconversations_screenTa5d6ff"Tb4b4b4:
Tff7b72if Tff7b72not Tffa657hasattrTb4b4b4(Tff7b72selfTb4b4b4, Ta5d6ff"Ta5d6ffdialog_openTa5d6ff"Tb4b4b4) Tff7b72or Tff7b72not Tff7b72selfTff7b72.Td2a8ffdialog_openTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffnew_conversation_actionTb4b4b4(Tff7b72selfTb4b4b4)
Tff7b72def Td2a8ffkeyboard_eventTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3windowTb4b4b4, Te6edf3keyTb4b4b4, Tff7b72*Te6edf3largsTb4b4b4)Tb4b4b4:
T8b949e# Handle escape/back
Tff7b72if Te6edf3key Tff7b72== T79c0ff27Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8ffcurrent Tff7b72== Ta5d6ff"Ta5d6ffconversations_screenTa5d6ff"Tb4b4b4:
Tff7b72if Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4) Tff7b72- Tff7b72selfTff7b72.Td2a8fflast_exit_event Tff7b72< T79c0ff2Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffquit_actionTb4b4b4(Tff7b72selfTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8fflast_exit_event Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffopen_conversationsTb4b4b4(Te6edf3directionTff7b72=Ta5d6ff"Ta5d6ffrightTa5d6ff"Tb4b4b4)
Tff7b72return Tff7b72True
Tff7b72def Td2a8ffwidget_hideTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3wTb4b4b4, Te6edf3hideTff7b72=Tff7b72TrueTb4b4b4)Tb4b4b4:
Tff7b72if Tffa657hasattrTb4b4b4(Te6edf3wTb4b4b4, Ta5d6ff"Ta5d6ffsaved_attrsTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Te6edf3hideTb4b4b4:
Te6edf3wTff7b72.Td2a8ffheightTb4b4b4, Te6edf3wTff7b72.Td2a8ffsize_hint_yTb4b4b4, Te6edf3wTff7b72.Td2a8ffopacityTb4b4b4, Te6edf3wTff7b72.Td2a8ffdisabled Tff7b72= Te6edf3wTff7b72.Td2a8ffsaved_attrs
Tff7b72del Te6edf3wTff7b72.Td2a8ffsaved_attrs
Tff7b72elif Te6edf3hideTb4b4b4:
Te6edf3wTff7b72.Td2a8ffsaved_attrs Tff7b72= Te6edf3wTff7b72.Td2a8ffheightTb4b4b4, Te6edf3wTff7b72.Td2a8ffsize_hint_yTb4b4b4, Te6edf3wTff7b72.Td2a8ffopacityTb4b4b4, Te6edf3wTff7b72.Td2a8ffdisabled
Te6edf3wTff7b72.Td2a8ffheightTb4b4b4, Te6edf3wTff7b72.Td2a8ffsize_hint_yTb4b4b4, Te6edf3wTff7b72.Td2a8ffopacityTb4b4b4, Te6edf3wTff7b72.Td2a8ffdisabled Tff7b72= T79c0ff0Tb4b4b4, Tff7b72NoneTb4b4b4, T79c0ff0Tb4b4b4, Tff7b72True
Tff7b72def Td2a8ffquit_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffnav_drawerTff7b72.Td2a8ffset_stateTb4b4b4(Ta5d6ff"Ta5d6ffclosedTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffshould_persist_dataTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8fftransition Tff7b72= Te6edf3NoTransitionTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8ffcurrent Tff7b72= Ta5d6ff"Ta5d6ffexit_screenTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffapp.displayingTa5d6ff"Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8ffcurrentTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffapp.runningTa5d6ff"Tb4b4b4, Tff7b72FalseTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffapp.foregroundTa5d6ff"Tb4b4b4, Tff7b72FalseTb4b4b4)
Tff7b72def Td2a8fffinal_exitTb4b4b4(Te6edf3dtTb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffStopping service...Ta5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffwants.service_stopTa5d6ff"Tb4b4b4, Tff7b72TrueTb4b4b4)
Tff7b72while Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffservice_availableTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3timeTff7b72.Td2a8ffsleepTb4b4b4(T79c0ff0.2Tb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffService stoppedTa5d6ff"Tb4b4b4)
Te6edf3RNSTff7b72.Td2a8ffexitTb4b4b4(Tb4b4b4)
Te6edf3MDAppTff7b72.Td2a8ffget_running_appTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffstopTb4b4b4(Tb4b4b4)
Te6edf3WindowTff7b72.Td2a8ffcloseTb4b4b4(Tb4b4b4)
Te6edf3ClockTff7b72.Td2a8ffschedule_onceTb4b4b4(Te6edf3final_exitTb4b4b4, T79c0ff0.5Tb4b4b4)
Tff7b72def Td2a8ffannounce_now_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8fflxmf_announceTb4b4b4(Tb4b4b4)
Te6edf3yes_button Tff7b72= Te6edf3MDFlatButtonTb4b4b4(
Te6edf3textTff7b72=Ta5d6ff"Ta5d6ffOKTa5d6ff"Tb4b4b4,
Tb4b4b4)
Te6edf3dialog Tff7b72= Te6edf3MDDialogTb4b4b4(
Te6edf3textTff7b72=Ta5d6ff"Ta5d6ffAn announce for your LXMF destination was sent on all available interfacesTa5d6ff"Tb4b4b4,
Te6edf3buttonsTff7b72=Tb4b4b4[ Te6edf3yes_button Tb4b4b4]Tb4b4b4,
T8b949e# elevation=0,
Tb4b4b4)
Tff7b72def Td2a8ffdl_yesTb4b4b4(Te6edf3sTb4b4b4)Tb4b4b4:
Te6edf3dialogTff7b72.Td2a8ffdismissTb4b4b4(Tb4b4b4)
Te6edf3yes_buttonTff7b72.Td2a8ffbindTb4b4b4(Te6edf3on_releaseTff7b72=Te6edf3dl_yesTb4b4b4)
Te6edf3dialogTff7b72.Td2a8ffopenTb4b4b4(Tb4b4b4)
T8b949e#################################################
T8b949e# Screens #
T8b949e#################################################
T8b949e### Messages (conversation) screen
T8b949e######################################
Tff7b72def Td2a8ffconversation_from_announce_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffhas_conversationTb4b4b4(Te6edf3context_destTb4b4b4)Tb4b4b4:
Tff7b72pass
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffcreate_conversationTb4b4b4(Te6edf3context_destTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffapp.flags.new_conversationsTa5d6ff"Tb4b4b4, Tff7b72TrueTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffopen_conversationTb4b4b4(Te6edf3context_destTb4b4b4)
Tff7b72def Td2a8ffconversation_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffopen_conversationTb4b4b4(Te6edf3senderTff7b72.Td2a8ffsb_uidTb4b4b4)
Tff7b72def Td2a8ffopen_conversationTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffpropagation_by_defaultTa5d6ff"Tb4b4b4]Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffoutbound_mode_propagation Tff7b72= Tff7b72True
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffoutbound_mode_propagation Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8fftransitionTff7b72.Td2a8ffdirection Tff7b72= Ta5d6ff"Ta5d6ffleftTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffmessages_view Tff7b72= Te6edf3MessagesTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3context_destTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffmessages_scrollviewTff7b72.Td2a8ffeffect_cls Tff7b72= Te6edf3ScrollEffect
Tff7b72for Te6edf3child Tff7b72in Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffmessages_scrollviewTff7b72.Td2a8ffchildrenTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffmessages_scrollviewTff7b72.Td2a8ffremove_widgetTb4b4b4(Te6edf3childTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffRemoved Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3childTb4b4b4)Tb4b4b4)
Te6edf3list_widget Tff7b72= Tff7b72selfTff7b72.Td2a8ffmessages_viewTff7b72.Td2a8ffget_widgetTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffmessages_scrollviewTff7b72.Td2a8ffadd_widgetTb4b4b4(Te6edf3list_widgetTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffmessages_scrollviewTff7b72.Td2a8ffscroll_y Tff7b72= T79c0ff0.001
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffmessages_toolbarTff7b72.Td2a8fftitle Tff7b72= Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffpeer_display_nameTb4b4b4(Te6edf3context_destTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffmessages_scrollviewTff7b72.Td2a8ffactive_conversation Tff7b72= Te6edf3context_dest
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffapp.active_conversationTa5d6ff"Tb4b4b4, Te6edf3context_destTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffnokeys_textTff7b72.Td2a8fftext Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72selfTff7b72.Td2a8ffmessage_area_detectTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffupdate_message_widgetsTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffmessage_textTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8ffcurrent Tff7b72= Ta5d6ff"Ta5d6ffmessages_screenTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffapp.displayingTa5d6ff"Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8ffcurrentTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffread_conversationTb4b4b4(Te6edf3context_destTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffapp.flags.unread_conversationsTa5d6ff"Tb4b4b4, Tff7b72TrueTb4b4b4)
Tff7b72def Td2a8ffclose_messages_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffopen_conversationsTb4b4b4(Te6edf3directionTff7b72=Ta5d6ff"Ta5d6ffrightTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8ffmessage_send_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72def Td2a8ffcbTb4b4b4(Te6edf3dtTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffmessage_send_dispatchTb4b4b4(Te6edf3senderTb4b4b4)
Te6edf3ClockTff7b72.Td2a8ffschedule_onceTb4b4b4(Te6edf3cbTb4b4b4, T79c0ff0.20Tb4b4b4)
Tff7b72def Td2a8ffmessage_send_dispatchTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffmessage_send_buttonTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72True
Tff7b72if Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8ffcurrent Tff7b72== Ta5d6ff"Ta5d6ffmessages_screenTa5d6ff"Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffoutbound_mode_propagation Tff7b72and Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffget_outbound_propagation_nodeTb4b4b4(Tb4b4b4) Tff7b72== Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffmessages_viewTff7b72.Td2a8ffsend_error_dialog Tff7b72= Te6edf3MDDialogTb4b4b4(
Te6edf3textTff7b72=Ta5d6ff"Ta5d6ffError: Propagated delivery was requested, but no active LXMF propagation nodes were found. Cannot send message. Wait for a Propagation Node to announce on the network, or manually specify one in the settings.Ta5d6ff"Tb4b4b4,
Te6edf3buttonsTff7b72=Tb4b4b4[
Te6edf3MDFlatButtonTb4b4b4(
Te6edf3textTff7b72=Ta5d6ff"Ta5d6ffOKTa5d6ff"Tb4b4b4,
Te6edf3theme_text_colorTff7b72=Ta5d6ff"Ta5d6ffCustomTa5d6ff"Tb4b4b4,
Te6edf3text_colorTff7b72=Tff7b72selfTff7b72.Td2a8fftheme_clsTff7b72.Td2a8ffprimary_colorTb4b4b4,
Te6edf3on_releaseTff7b72=Tff7b72selfTff7b72.Td2a8ffmessages_viewTff7b72.Td2a8ffclose_send_error_dialog
Tb4b4b4)
Tb4b4b4]Tb4b4b4,
T8b949e# elevation=0,
Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffmessages_viewTff7b72.Td2a8ffsend_error_dialogTff7b72.Td2a8ffopenTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3msg_content Tff7b72= Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffmessage_textTff7b72.Td2a8fftext
Te6edf3context_dest Tff7b72= Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffmessages_scrollviewTff7b72.Td2a8ffactive_conversation
Tff7b72if Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffsend_messageTb4b4b4(Te6edf3msg_contentTb4b4b4, Te6edf3context_destTb4b4b4, Tff7b72selfTff7b72.Td2a8ffoutbound_mode_propagationTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffmessage_textTff7b72.Td2a8fftext Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffmessages_scrollviewTff7b72.Td2a8ffscroll_y Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffjobsTb4b4b4(T79c0ff0Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffmessages_viewTff7b72.Td2a8ffsend_error_dialog Tff7b72= Te6edf3MDDialogTb4b4b4(
Te6edf3textTff7b72=Ta5d6ff"Ta5d6ffError: Could not send the messageTa5d6ff"Tb4b4b4,
Te6edf3buttonsTff7b72=Tb4b4b4[
Te6edf3MDFlatButtonTb4b4b4(
Te6edf3textTff7b72=Ta5d6ff"Ta5d6ffOKTa5d6ff"Tb4b4b4,
Te6edf3theme_text_colorTff7b72=Ta5d6ff"Ta5d6ffCustomTa5d6ff"Tb4b4b4,
Te6edf3text_colorTff7b72=Tff7b72selfTff7b72.Td2a8fftheme_clsTff7b72.Td2a8ffprimary_colorTb4b4b4,
Te6edf3on_releaseTff7b72=Tff7b72selfTff7b72.Td2a8ffmessages_viewTff7b72.Td2a8ffclose_send_error_dialog
Tb4b4b4)
Tb4b4b4]Tb4b4b4,
T8b949e# elevation=0,
Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffmessages_viewTff7b72.Td2a8ffsend_error_dialogTff7b72.Td2a8ffopenTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffcbTb4b4b4(Te6edf3dtTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffmessage_send_buttonTff7b72.Td2a8ffdisabled Tff7b72= Tff7b72False
Te6edf3ClockTff7b72.Td2a8ffschedule_onceTb4b4b4(Te6edf3cbTb4b4b4, T79c0ff0.5Tb4b4b4)
Tff7b72def Td2a8ffmessage_propagation_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffoutbound_mode_propagationTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffoutbound_mode_propagation Tff7b72= Tff7b72False
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffoutbound_mode_propagation Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8ffupdate_message_widgetsTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffupdate_message_widgetsTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3toolbar_items Tff7b72= Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffmessages_toolbarTff7b72.Td2a8ffidsTff7b72.Td2a8ffright_actionsTff7b72.Td2a8ffchildren
Te6edf3mode_item Tff7b72= Te6edf3toolbar_itemsTb4b4b4[T79c0ff1Tb4b4b4]
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffoutbound_mode_propagationTb4b4b4:
Te6edf3mode_itemTff7b72.Td2a8fficon Tff7b72= Ta5d6ff"Ta5d6fflan-connectTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffmessage_textTff7b72.Td2a8ffhint_text Tff7b72= Ta5d6ff"Ta5d6ffWrite message for direct deliveryTa5d6ff"
Tff7b72elseTb4b4b4:
Te6edf3mode_itemTff7b72.Td2a8fficon Tff7b72= Ta5d6ff"Ta5d6ffupload-networkTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffmessage_textTff7b72.Td2a8ffhint_text Tff7b72= Ta5d6ff"Ta5d6ffWrite message for propagationTa5d6ff"
T8b949e# self.root.ids.message_text.hint_text = "Write message for delivery via propagation nodes"
Tff7b72def Td2a8ffkey_query_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTb4b4b4)Tb4b4b4:
Te6edf3context_dest Tff7b72= Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffmessages_scrollviewTff7b72.Td2a8ffactive_conversation
Tff7b72if Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffrequest_keyTb4b4b4(Te6edf3context_destTb4b4b4)Tb4b4b4:
Te6edf3keys_str Tff7b72= Ta5d6ff"Ta5d6ffPublic key information for Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3context_destTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff was requested from the network. Waiting for request to be answered.Ta5d6ff"
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffnokeys_textTff7b72.Td2a8fftext Tff7b72= Te6edf3keys_str
Tff7b72elseTb4b4b4:
Te6edf3keys_str Tff7b72= Ta5d6ff"Ta5d6ffCould not send request. Check your connectivity and addresses.Ta5d6ff"
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffnokeys_textTff7b72.Td2a8fftext Tff7b72= Te6edf3keys_str
Tff7b72def Td2a8ffmessage_area_detectTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3context_dest Tff7b72= Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffmessages_scrollviewTff7b72.Td2a8ffactive_conversation
Tff7b72if Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffis_knownTb4b4b4(Te6edf3context_destTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffmessages_scrollviewTff7b72.Td2a8ffdest_known Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8ffwidget_hideTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffmessage_input_partTb4b4b4, Tff7b72FalseTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffwidget_hideTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffno_keys_partTb4b4b4, Tff7b72TrueTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffmessages_scrollviewTff7b72.Td2a8ffdest_known Tff7b72= Tff7b72False
Tff7b72if Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffnokeys_textTff7b72.Td2a8fftext Tff7b72== Ta5d6ff"Ta5d6ff"Tb4b4b4:
Te6edf3keys_str Tff7b72= Ta5d6ff"Ta5d6ffThe crytographic keys for the destination address are unknown at this time. You can wait for an announce to arrive, or query the network for the necessary keys.Ta5d6ff"
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffnokeys_textTff7b72.Td2a8fftext Tff7b72= Te6edf3keys_str
Tff7b72selfTff7b72.Td2a8ffwidget_hideTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffmessage_input_partTb4b4b4, Tff7b72TrueTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffwidget_hideTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffno_keys_partTb4b4b4, Tff7b72FalseTb4b4b4)
T8b949e### Conversations screen
T8b949e######################################
Tff7b72def Td2a8ffconversations_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffopen_conversationsTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffopen_conversationsTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3directionTff7b72=Ta5d6ff"Ta5d6ffleftTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8fftransitionTff7b72.Td2a8ffdirection Tff7b72= Te6edf3direction
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffnav_drawerTff7b72.Td2a8ffset_stateTb4b4b4(Ta5d6ff"Ta5d6ffclosedTa5d6ff"Tb4b4b4)
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffconversations_viewTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconversations_view Tff7b72= Te6edf3ConversationsTb4b4b4(Tff7b72selfTb4b4b4)
Tff7b72for Te6edf3child Tff7b72in Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconversations_scrollviewTff7b72.Td2a8ffchildrenTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconversations_scrollviewTff7b72.Td2a8ffremove_widgetTb4b4b4(Te6edf3childTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconversations_scrollviewTff7b72.Td2a8ffeffect_cls Tff7b72= Te6edf3ScrollEffect
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconversations_scrollviewTff7b72.Td2a8ffadd_widgetTb4b4b4(Tff7b72selfTff7b72.Td2a8ffconversations_viewTff7b72.Td2a8ffget_widgetTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8ffcurrent Tff7b72= Ta5d6ff"Ta5d6ffconversations_screenTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffmessages_scrollviewTff7b72.Td2a8ffactive_conversation Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffapp.displayingTa5d6ff"Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8ffcurrentTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffwants.clear_notificationsTa5d6ff"Tb4b4b4, Tff7b72TrueTb4b4b4)
Tff7b72def Td2a8ffconnectivity_statusTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTb4b4b4)Tb4b4b4:
Te6edf3hs Tff7b72= Te6edf3dpTb4b4b4(T79c0ff22Tb4b4b4)
Te6edf3connectivity_status Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72if Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffget_platformTb4b4b4(Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffandroidTa5d6ff"Tb4b4b4:
Te6edf3connectivity_status Tff7b72= Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffgetstateTb4b4b4(Ta5d6ff"Ta5d6ffservice.connectivity_statusTa5d6ff"Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffreticulumTff7b72.Td2a8ffis_connected_to_shared_instanceTb4b4b4:
Te6edf3connectivity_status Tff7b72= Ta5d6ff"Ta5d6ff[size=22dp][b]Connectivity Status[/b][/size]Tffea00\nTffea00\nTa5d6ffSideband is connected via a shared Reticulum instance running on this system. Use the rnstatus utility to obtain full connectivity info.Ta5d6ff"
Tff7b72elseTb4b4b4:
Te6edf3connectivity_status Tff7b72= Ta5d6ff"Ta5d6ff[size=22dp][b]Connectivity Status[/b][/size]Tffea00\nTffea00\nTa5d6ffSideband is currently running a standalone or master Reticulum instance on this system. Use the rnstatus utility to obtain full connectivity info.Ta5d6ff"
Te6edf3yes_button Tff7b72= Te6edf3MDFlatButtonTb4b4b4(
Te6edf3textTff7b72=Ta5d6ff"Ta5d6ffOKTa5d6ff"Tb4b4b4,
Tb4b4b4)
Te6edf3dialog Tff7b72= Te6edf3MDDialogTb4b4b4(
Te6edf3textTff7b72=Te6edf3connectivity_statusTb4b4b4,
Te6edf3buttonsTff7b72=Tb4b4b4[ Te6edf3yes_button Tb4b4b4]Tb4b4b4,
T8b949e# elevation=0,
Tb4b4b4)
Tff7b72def Td2a8ffdl_yesTb4b4b4(Te6edf3sTb4b4b4)Tb4b4b4:
Te6edf3dialogTff7b72.Td2a8ffdismissTb4b4b4(Tb4b4b4)
Te6edf3yes_buttonTff7b72.Td2a8ffbindTb4b4b4(Te6edf3on_releaseTff7b72=Te6edf3dl_yesTb4b4b4)
Te6edf3dialogTff7b72.Td2a8ffopenTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8fflxmf_sync_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffget_outbound_propagation_nodeTb4b4b4(Tb4b4b4) Tff7b72== Tff7b72NoneTb4b4b4:
Te6edf3yes_button Tff7b72= Te6edf3MDFlatButtonTb4b4b4(
Te6edf3textTff7b72=Ta5d6ff"Ta5d6ffOKTa5d6ff"Tb4b4b4,
Tb4b4b4)
Te6edf3dialog Tff7b72= Te6edf3MDDialogTb4b4b4(
Te6edf3textTff7b72=Ta5d6ff"Ta5d6ffNo active LXMF propagation nodes were found. Cannot fetch messages. Wait for a Propagation Node to announce on the network, or manually specify one in the settings.Ta5d6ff"Tb4b4b4,
Te6edf3buttonsTff7b72=Tb4b4b4[ Te6edf3yes_button Tb4b4b4]Tb4b4b4,
T8b949e# elevation=0,
Tb4b4b4)
Tff7b72def Td2a8ffdl_yesTb4b4b4(Te6edf3sTb4b4b4)Tb4b4b4:
Te6edf3dialogTff7b72.Td2a8ffdismissTb4b4b4(Tb4b4b4)
Te6edf3yes_buttonTff7b72.Td2a8ffbindTb4b4b4(Te6edf3on_releaseTff7b72=Te6edf3dl_yesTb4b4b4)
Te6edf3dialogTff7b72.Td2a8ffopenTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflxmf_sync_limitTa5d6ff"Tb4b4b4]Tb4b4b4:
Te6edf3sl Tff7b72= Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflxmf_sync_maxTa5d6ff"Tb4b4b4]
Tff7b72elseTb4b4b4:
Te6edf3sl Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffrequest_lxmf_syncTb4b4b4(Te6edf3limitTff7b72=Te6edf3slTb4b4b4)
Te6edf3close_button Tff7b72= Te6edf3MDFlatButtonTb4b4b4(Te6edf3textTff7b72=Ta5d6ff"Ta5d6ffCloseTa5d6ff"Tb4b4b4, Te6edf3font_sizeTff7b72=Te6edf3dpTb4b4b4(T79c0ff20Tb4b4b4)Tb4b4b4)
T8b949e# stop_button = MDFlatButton(text="Stop", font_size=dp(20))
Te6edf3dialog_content Tff7b72= Te6edf3MsgSyncTb4b4b4(Tb4b4b4)
Te6edf3dialog Tff7b72= Te6edf3MDDialogTb4b4b4(
Te6edf3titleTff7b72=Ta5d6ff"Ta5d6ffLXMF Sync via Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffmessage_routerTff7b72.Td2a8ffget_outbound_propagation_nodeTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4,
Tffa657typeTff7b72=Ta5d6ff"Ta5d6ffcustomTa5d6ff"Tb4b4b4,
Te6edf3content_clsTff7b72=Te6edf3dialog_contentTb4b4b4,
Te6edf3buttonsTff7b72=Tb4b4b4[ Te6edf3close_button Tb4b4b4]Tb4b4b4,
T8b949e# elevation=0,
Tb4b4b4)
Te6edf3dialogTff7b72.Td2a8ffd_content Tff7b72= Te6edf3dialog_content
Tff7b72def Td2a8ffdl_closeTb4b4b4(Te6edf3sTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffapp.flags.lxmf_sync_dialog_openTa5d6ff"Tb4b4b4, Tff7b72FalseTb4b4b4)
Te6edf3dialogTff7b72.Td2a8ffdismissTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffcancel_lxmf_syncTb4b4b4(Tb4b4b4)
Te6edf3close_buttonTff7b72.Td2a8ffbindTb4b4b4(Te6edf3on_releaseTff7b72=Te6edf3dl_closeTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffapp.flags.lxmf_sync_dialog_openTa5d6ff"Tb4b4b4, Tff7b72TrueTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsync_dialog Tff7b72= Te6edf3dialog_content
Te6edf3dialogTff7b72.Td2a8ffopenTb4b4b4(Tb4b4b4)
Te6edf3dialog_contentTff7b72.Td2a8ffidsTff7b72.Td2a8ffsync_progressTff7b72.Td2a8ffvalue Tff7b72= Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffget_sync_progressTb4b4b4(Tb4b4b4)Tff7b72*T79c0ff100
Te6edf3dialog_contentTff7b72.Td2a8ffidsTff7b72.Td2a8ffsync_statusTff7b72.Td2a8fftext Tff7b72= Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffget_sync_statusTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffnew_conversation_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3yes_button Tff7b72= Te6edf3MDFlatButtonTb4b4b4(
Te6edf3textTff7b72=Ta5d6ff"Ta5d6ffOKTa5d6ff"Tb4b4b4,
Te6edf3font_sizeTff7b72=Te6edf3dpTb4b4b4(T79c0ff20Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Te6edf3no_button Tff7b72= Te6edf3MDFlatButtonTb4b4b4(
Te6edf3textTff7b72=Ta5d6ff"Ta5d6ffCancelTa5d6ff"Tb4b4b4,
Te6edf3font_sizeTff7b72=Te6edf3dpTb4b4b4(T79c0ff20Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Te6edf3dialog_content Tff7b72= Te6edf3NewConvTb4b4b4(Tb4b4b4)
Te6edf3dialog Tff7b72= Te6edf3MDDialogTb4b4b4(
Te6edf3titleTff7b72=Ta5d6ff"Ta5d6ffNew ConversationTa5d6ff"Tb4b4b4,
Tffa657typeTff7b72=Ta5d6ff"Ta5d6ffcustomTa5d6ff"Tb4b4b4,
Te6edf3content_clsTff7b72=Te6edf3dialog_contentTb4b4b4,
Te6edf3buttonsTff7b72=Tb4b4b4[ Te6edf3yes_buttonTb4b4b4, Te6edf3no_button Tb4b4b4]Tb4b4b4,
T8b949e# elevation=0,
Tb4b4b4)
Te6edf3dialogTff7b72.Td2a8ffd_content Tff7b72= Te6edf3dialog_content
Tff7b72def Td2a8ffdl_yesTb4b4b4(Te6edf3sTb4b4b4)Tb4b4b4:
Te6edf3new_result Tff7b72= Tff7b72False
Tff7b72tryTb4b4b4:
Te6edf3n_address Tff7b72= Te6edf3dialogTff7b72.Td2a8ffd_contentTff7b72.Td2a8ffidsTb4b4b4[Ta5d6ff"Ta5d6ffn_address_fieldTa5d6ff"Tb4b4b4]Tff7b72.Td2a8fftext
Te6edf3n_name Tff7b72= Te6edf3dialogTff7b72.Td2a8ffd_contentTff7b72.Td2a8ffidsTb4b4b4[Ta5d6ff"Ta5d6ffn_name_fieldTa5d6ff"Tb4b4b4]Tff7b72.Td2a8fftext
Te6edf3n_trusted Tff7b72= Te6edf3dialogTff7b72.Td2a8ffd_contentTff7b72.Td2a8ffidsTb4b4b4[Ta5d6ff"Ta5d6ffn_trustedTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffactive
Te6edf3new_result Tff7b72= Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffnew_conversationTb4b4b4(Te6edf3n_addressTb4b4b4, Te6edf3n_nameTb4b4b4, Te6edf3n_trustedTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while creating conversation: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72if Te6edf3new_resultTb4b4b4:
Te6edf3dialogTff7b72.Td2a8ffd_contentTff7b72.Td2a8ffidsTb4b4b4[Ta5d6ff"Ta5d6ffn_address_fieldTa5d6ff"Tb4b4b4]Tff7b72.Td2a8fferror Tff7b72= Tff7b72False
Te6edf3dialogTff7b72.Td2a8ffdismissTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffopen_conversationsTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3dialogTff7b72.Td2a8ffd_contentTff7b72.Td2a8ffidsTb4b4b4[Ta5d6ff"Ta5d6ffn_address_fieldTa5d6ff"Tb4b4b4]Tff7b72.Td2a8fferror Tff7b72= Tff7b72True
T8b949e# dialog.d_content.ids["n_error_field"].text = "Could not create conversation. Check your input."
Tff7b72def Td2a8ffdl_noTb4b4b4(Te6edf3sTb4b4b4)Tb4b4b4:
Te6edf3dialogTff7b72.Td2a8ffdismissTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffdl_dsTb4b4b4(Te6edf3sTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffdialog_open Tff7b72= Tff7b72False
Te6edf3yes_buttonTff7b72.Td2a8ffbindTb4b4b4(Te6edf3on_releaseTff7b72=Te6edf3dl_yesTb4b4b4)
Te6edf3no_buttonTff7b72.Td2a8ffbindTb4b4b4(Te6edf3on_releaseTff7b72=Te6edf3dl_noTb4b4b4)
Te6edf3dialogTff7b72.Td2a8ffbindTb4b4b4(Te6edf3on_dismissTff7b72=Te6edf3dl_dsTb4b4b4)
Te6edf3dialogTff7b72.Td2a8ffopenTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdialog_open Tff7b72= Tff7b72True
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while creating new conversation dialog: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
T8b949e### Information/version screen
T8b949e######################################
Tff7b72def Td2a8ffinformation_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72def Td2a8fflink_execTb4b4b4(Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4, Te6edf3eventTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72import T7ee787webbrowser
Te6edf3webbrowserTff7b72.Td2a8ffopenTb4b4b4(Ta5d6ff"Ta5d6ffhttps://unsigned.io/sidebandTa5d6ff"Tb4b4b4)
Te6edf3info Tff7b72= Ta5d6ff"Ta5d6ffThis is Sideband vTa5d6ff"Tff7b72+Te6edf3__version__Tff7b72+Ta5d6ff"Ta5d6ff Ta5d6ff"Tff7b72+Te6edf3__variant__Tff7b72+Ta5d6ff"Ta5d6ff, on RNS vTa5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ff__version__Tff7b72+Ta5d6ff"Tffea00\nTffea00\nTa5d6ffHumbly build using the following open components:Tffea00\nTffea00\nTa5d6ff - [b]Reticulum[/b] (MIT License)Tffea00\nTa5d6ff - [b]LXMF[/b] (MIT License)Tffea00\nTa5d6ff - [b]KivyMD[/b] (MIT License)Tffea00\nTa5d6ff - [b]Kivy[/b] (MIT License)Tffea00\nTa5d6ff - [b]Python[/b] (PSF License)Ta5d6ff"Tff7b72+Ta5d6ff"Tffea00\nTffea00\nTa5d6ffGo to [u][ref=link]https://unsigned.io/sideband[/ref][/u] to support the project.Tffea00\nTffea00\nTa5d6ffThe Sideband app is Copyright (c) 2022 Mark Qvist / unsigned.ioTffea00\nTffea00\nTa5d6ffPermission is granted to freely share and distribute binary copies of Sideband vTa5d6ff"Tff7b72+Te6edf3__version__Tff7b72+Ta5d6ff"Ta5d6ff Ta5d6ff"Tff7b72+Te6edf3__variant__Tff7b72+Ta5d6ff"Ta5d6ff, so long as no payment or compensation is charged for said distribution or sharing.Tffea00\nTffea00\nTa5d6ffIf you were charged or paid anything for this copy of Sideband, please report it to [b]license@unsigned.io[/b].Tffea00\nTffea00\nTa5d6ffTHIS IS EXPERIMENTAL SOFTWARE - USE AT YOUR OWN RISK AND RESPONSIBILITYTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffinformation_infoTff7b72.Td2a8fftext Tff7b72= Te6edf3info
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffinformation_infoTff7b72.Td2a8ffbindTb4b4b4(Te6edf3on_ref_pressTff7b72=Te6edf3link_execTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8fftransitionTff7b72.Td2a8ffdirection Tff7b72= Ta5d6ff"Ta5d6ffleftTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8ffcurrent Tff7b72= Ta5d6ff"Ta5d6ffinformation_screenTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffnav_drawerTff7b72.Td2a8ffset_stateTb4b4b4(Ta5d6ff"Ta5d6ffclosedTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffapp.displayingTa5d6ff"Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8ffcurrentTb4b4b4)
Tff7b72def Td2a8ffclose_information_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffopen_conversationsTb4b4b4(Te6edf3directionTff7b72=Ta5d6ff"Ta5d6ffrightTa5d6ff"Tb4b4b4)
T8b949e### Settings screen
T8b949e######################################
Tff7b72def Td2a8ffsettings_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8fftransitionTff7b72.Td2a8ffdirection Tff7b72= Ta5d6ff"Ta5d6ffleftTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffsettings_initTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8ffcurrent Tff7b72= Ta5d6ff"Ta5d6ffsettings_screenTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffnav_drawerTff7b72.Td2a8ffset_stateTb4b4b4(Ta5d6ff"Ta5d6ffclosedTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffapp.displayingTa5d6ff"Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8ffcurrentTb4b4b4)
Tff7b72def Td2a8ffsettings_initTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffsettings_readyTb4b4b4:
Tff7b72def Td2a8ffsave_disp_nameTb4b4b4(Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4, Te6edf3eventTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Te6edf3in_name Tff7b72= Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffsettings_display_nameTff7b72.Td2a8fftext
Tff7b72if Te6edf3in_name Tff7b72== Ta5d6ff"Ta5d6ff"Tb4b4b4:
Te6edf3new_name Tff7b72= Ta5d6ff"Ta5d6ffAnonymous PeerTa5d6ff"
Tff7b72elseTb4b4b4:
Te6edf3new_name Tff7b72= Te6edf3in_name
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffdisplay_nameTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3new_name
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffsave_configurationTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffsave_prop_addrTb4b4b4(Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4, Te6edf3eventTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Te6edf3in_addr Tff7b72= Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffsettings_propagation_node_addressTff7b72.Td2a8fftext
Te6edf3new_addr Tff7b72= Tff7b72None
Tff7b72if Te6edf3in_addr Tff7b72== Ta5d6ff"Ta5d6ff"Tb4b4b4:
Te6edf3new_addr Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffsettings_propagation_node_addressTff7b72.Td2a8fferror Tff7b72= Tff7b72False
Tff7b72elseTb4b4b4:
Tff7b72if Tffa657lenTb4b4b4(Te6edf3in_addrTb4b4b4) Tff7b72!= Te6edf3RNSTff7b72.Td2a8ffReticulumTff7b72.Td2a8ffTRUNCATED_HASHLENGTHTff7b72/Tff7b72/T79c0ff8Tff7b72*T79c0ff2Tb4b4b4:
Te6edf3new_addr Tff7b72= Tff7b72None
Tff7b72elseTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3new_addr Tff7b72= Tffa657bytesTff7b72.Td2a8fffromhexTb4b4b4(Te6edf3in_addrTb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3new_addr Tff7b72= Tff7b72None
Tff7b72if Te6edf3new_addr Tff7b72== Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffsettings_propagation_node_addressTff7b72.Td2a8fferror Tff7b72= Tff7b72True
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffsettings_propagation_node_addressTff7b72.Td2a8fferror Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflxmf_propagation_nodeTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3new_addr
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffset_active_propagation_nodeTb4b4b4(Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflxmf_propagation_nodeTa5d6ff"Tb4b4b4]Tb4b4b4)
Tff7b72def Td2a8ffsave_dark_uiTb4b4b4(Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4, Te6edf3eventTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffdark_uiTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffsettings_dark_uiTff7b72.Td2a8ffactive
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffsave_configurationTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffupdate_ui_themeTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffsave_start_announceTb4b4b4(Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4, Te6edf3eventTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffstart_announceTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffsettings_start_announceTff7b72.Td2a8ffactive
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffsave_configurationTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffsave_lxmf_delivery_by_defaultTb4b4b4(Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4, Te6edf3eventTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffpropagation_by_defaultTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffsettings_lxmf_delivery_by_defaultTff7b72.Td2a8ffactive
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffsave_configurationTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffsave_lxmf_sync_limitTb4b4b4(Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4, Te6edf3eventTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflxmf_sync_limitTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffsettings_lxmf_sync_limitTff7b72.Td2a8ffactive
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffsave_configurationTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffsettings_lxmf_addressTff7b72.Td2a8fftext Tff7b72= Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8fflxmf_destinationTff7b72.Td2a8ffhashTb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffsettings_display_nameTff7b72.Td2a8fftext Tff7b72= Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffdisplay_nameTa5d6ff"Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffsettings_display_nameTff7b72.Td2a8ffbindTb4b4b4(Te6edf3on_text_validateTff7b72=Te6edf3save_disp_nameTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffsettings_display_nameTff7b72.Td2a8ffbindTb4b4b4(Te6edf3focusTff7b72=Te6edf3save_disp_nameTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflxmf_propagation_nodeTa5d6ff"Tb4b4b4] Tff7b72== Tff7b72NoneTb4b4b4:
Te6edf3prop_node_addr Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72elseTb4b4b4:
Te6edf3prop_node_addr Tff7b72= Te6edf3RNSTff7b72.Td2a8ffhexrepTb4b4b4(Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflxmf_propagation_nodeTa5d6ff"Tb4b4b4]Tb4b4b4, Te6edf3delimitTff7b72=Tff7b72FalseTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffsettings_propagation_node_addressTff7b72.Td2a8fftext Tff7b72= Te6edf3prop_node_addr
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffsettings_propagation_node_addressTff7b72.Td2a8ffbindTb4b4b4(Te6edf3on_text_validateTff7b72=Te6edf3save_prop_addrTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffsettings_propagation_node_addressTff7b72.Td2a8ffbindTb4b4b4(Te6edf3focusTff7b72=Te6edf3save_prop_addrTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffsettings_dark_uiTff7b72.Td2a8ffactive Tff7b72= Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffdark_uiTa5d6ff"Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffsettings_dark_uiTff7b72.Td2a8ffbindTb4b4b4(Te6edf3activeTff7b72=Te6edf3save_dark_uiTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffsettings_start_announceTff7b72.Td2a8ffactive Tff7b72= Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffstart_announceTa5d6ff"Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffsettings_start_announceTff7b72.Td2a8ffbindTb4b4b4(Te6edf3activeTff7b72=Te6edf3save_start_announceTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffsettings_lxmf_delivery_by_defaultTff7b72.Td2a8ffactive Tff7b72= Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffpropagation_by_defaultTa5d6ff"Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffsettings_lxmf_delivery_by_defaultTff7b72.Td2a8ffbindTb4b4b4(Te6edf3activeTff7b72=Te6edf3save_lxmf_delivery_by_defaultTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflxmf_sync_limitTa5d6ff"Tb4b4b4] Tff7b72== Tff7b72None Tff7b72or Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6fflxmf_sync_limitTa5d6ff"Tb4b4b4] Tff7b72== Tff7b72FalseTb4b4b4:
Te6edf3sync_limit Tff7b72= Tff7b72False
Tff7b72elseTb4b4b4:
Te6edf3sync_limit Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffsettings_lxmf_sync_limitTff7b72.Td2a8ffactive Tff7b72= Te6edf3sync_limit
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffsettings_lxmf_sync_limitTff7b72.Td2a8ffbindTb4b4b4(Te6edf3activeTff7b72=Te6edf3save_lxmf_sync_limitTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsettings_ready Tff7b72= Tff7b72True
Tff7b72def Td2a8ffclose_settings_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffopen_conversationsTb4b4b4(Te6edf3directionTff7b72=Ta5d6ff"Ta5d6ffrightTa5d6ff"Tb4b4b4)
T8b949e### Connectivity screen
T8b949e######################################
Tff7b72def Td2a8ffconnectivity_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffconnectivity_initTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8fftransitionTff7b72.Td2a8ffdirection Tff7b72= Ta5d6ff"Ta5d6ffleftTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8ffcurrent Tff7b72= Ta5d6ff"Ta5d6ffconnectivity_screenTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffnav_drawerTff7b72.Td2a8ffset_stateTb4b4b4(Ta5d6ff"Ta5d6ffclosedTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffapp.displayingTa5d6ff"Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8ffcurrentTb4b4b4)
Tff7b72def Td2a8ffconnectivity_initTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffconnectivity_readyTb4b4b4:
Tff7b72def Td2a8ffcon_hide_settingsTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffwidget_hideTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_use_localTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffwidget_hideTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_local_groupidTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffwidget_hideTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_local_ifac_netnameTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffwidget_hideTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_local_ifac_passphraseTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffwidget_hideTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_use_tcpTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffwidget_hideTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_tcp_hostTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffwidget_hideTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_tcp_portTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffwidget_hideTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_tcp_ifac_netnameTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffwidget_hideTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_tcp_ifac_passphraseTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffwidget_hideTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_use_i2pTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffwidget_hideTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_i2p_b32Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffwidget_hideTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_i2p_ifac_netnameTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffwidget_hideTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_i2p_ifac_passphraseTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffwidget_hideTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_tcp_labelTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffwidget_hideTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_local_labelTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffwidget_hideTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_i2p_labelTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffwidget_hideTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_rnode_labelTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffwidget_hideTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_use_rnodeTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffwidget_hideTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_rnode_cidTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffwidget_hideTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_modem_labelTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffwidget_hideTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_use_modemTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffwidget_hideTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_modem_fieldsTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffwidget_hideTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_bluetooth_labelTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffwidget_hideTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_use_bluetoothTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffwidget_hideTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_bluetooth_fieldsTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffwidget_hideTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_transport_labelTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffwidget_hideTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_enable_transportTb4b4b4)
T8b949e# self.widget_hide(self.root.ids.rnode_support_info)
Tff7b72def Td2a8ffcon_collapse_localTb4b4b4(Te6edf3collapseTff7b72=Tff7b72TrueTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffwidget_hideTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_local_fieldsTb4b4b4, Te6edf3collapseTb4b4b4)
Tff7b72def Td2a8ffcon_collapse_tcpTb4b4b4(Te6edf3collapseTff7b72=Tff7b72TrueTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffwidget_hideTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_tcp_fieldsTb4b4b4, Te6edf3collapseTb4b4b4)
Tff7b72def Td2a8ffcon_collapse_i2pTb4b4b4(Te6edf3collapseTff7b72=Tff7b72TrueTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffwidget_hideTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_i2p_fieldsTb4b4b4, Te6edf3collapseTb4b4b4)
Tff7b72def Td2a8ffcon_collapse_bluetoothTb4b4b4(Te6edf3collapseTff7b72=Tff7b72TrueTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffwidget_hideTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_bluetooth_fieldsTb4b4b4, Te6edf3collapseTb4b4b4)
Tff7b72def Td2a8ffcon_collapse_rnodeTb4b4b4(Te6edf3collapseTff7b72=Tff7b72TrueTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffwidget_hideTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_rnode_fieldsTb4b4b4, Te6edf3collapseTb4b4b4)
Tff7b72def Td2a8ffcon_collapse_modemTb4b4b4(Te6edf3collapseTff7b72=Tff7b72TrueTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffwidget_hideTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_modem_fieldsTb4b4b4, Te6edf3collapseTb4b4b4)
Tff7b72def Td2a8ffsave_connectivityTb4b4b4(Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4, Te6edf3eventTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_localTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_use_localTff7b72.Td2a8ffactive
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_local_groupidTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_local_groupidTff7b72.Td2a8fftext
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_local_ifac_netnameTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_local_ifac_netnameTff7b72.Td2a8fftext
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_local_ifac_passphraseTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_local_ifac_passphraseTff7b72.Td2a8fftext
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_tcpTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_use_tcpTff7b72.Td2a8ffactive
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_tcp_hostTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_tcp_hostTff7b72.Td2a8fftext
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_tcp_portTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_tcp_portTff7b72.Td2a8fftext
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_tcp_ifac_netnameTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_tcp_ifac_netnameTff7b72.Td2a8fftext
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_tcp_ifac_passphraseTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_tcp_ifac_passphraseTff7b72.Td2a8fftext
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_i2pTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_use_i2pTff7b72.Td2a8ffactive
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_i2p_b32Ta5d6ff"Tb4b4b4] Tff7b72= Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_i2p_b32Tff7b72.Td2a8fftext
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_i2p_ifac_netnameTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_i2p_ifac_netnameTff7b72.Td2a8fftext
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_i2p_ifac_passphraseTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_i2p_ifac_passphraseTff7b72.Td2a8fftext
Te6edf3con_collapse_localTb4b4b4(Te6edf3collapseTff7b72=Tff7b72not Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_use_localTff7b72.Td2a8ffactiveTb4b4b4)
Te6edf3con_collapse_tcpTb4b4b4(Te6edf3collapseTff7b72=Tff7b72not Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_use_tcpTff7b72.Td2a8ffactiveTb4b4b4)
Te6edf3con_collapse_i2pTb4b4b4(Te6edf3collapseTff7b72=Tff7b72not Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_use_i2pTff7b72.Td2a8ffactiveTb4b4b4)
Te6edf3con_collapse_rnodeTb4b4b4(Te6edf3collapseTff7b72=Tff7b72not Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_use_rnodeTff7b72.Td2a8ffactiveTb4b4b4)
Te6edf3con_collapse_bluetoothTb4b4b4(Te6edf3collapseTff7b72=Tff7b72not Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_use_bluetoothTff7b72.Td2a8ffactiveTb4b4b4)
Te6edf3con_collapse_modemTb4b4b4(Te6edf3collapseTff7b72=Tff7b72not Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_use_modemTff7b72.Td2a8ffactiveTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffsave_configurationTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffget_platformTb4b4b4(Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffandroidTa5d6ff"Tb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffgetpersistentTb4b4b4(Ta5d6ff"Ta5d6ffservice.is_controlling_connectivityTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3info Tff7b72= Ta5d6ff"Ta5d6ffSideband is connected via a shared Reticulum instance running on this system.Tffea00\nTffea00\nTa5d6ff"
Te6edf3info Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ffTo configure connectivity, edit the relevant configuration file for the instance.Ta5d6ff"
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_infoTff7b72.Td2a8fftext Tff7b72= Te6edf3info
Te6edf3con_hide_settingsTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3info Tff7b72= Ta5d6ff"Ta5d6ffBy default, Sideband will try to discover and connect to any available Reticulum networks via active WiFi and/or Ethernet interfaces. If any Reticulum Transport Instances are found, Sideband will use these to connect to wider Reticulum networks. You can disable this behaviour if you donTa5d6ff'Ta5d6fft want it.Tffea00\nTffea00\nTa5d6ff"
Te6edf3info Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ffYou can also connect to a network via a remote or local Reticulum instance using TCP or I2P. [b]Please Note![/b] Connecting via I2P requires that you already have I2P running on your device, and that the SAM API is enabled.Tffea00\nTffea00\nTa5d6ff"
Te6edf3info Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ffFor changes to connectivity to take effect, you must shut down and restart Sideband.Tffea00\nTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_infoTff7b72.Td2a8fftext Tff7b72= Te6edf3info
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_use_localTff7b72.Td2a8ffactive Tff7b72= Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_localTa5d6ff"Tb4b4b4]
Te6edf3con_collapse_localTb4b4b4(Te6edf3collapseTff7b72=Tff7b72not Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_use_localTff7b72.Td2a8ffactiveTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_local_groupidTff7b72.Td2a8fftext Tff7b72= Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_local_groupidTa5d6ff"Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_local_ifac_netnameTff7b72.Td2a8fftext Tff7b72= Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_local_ifac_netnameTa5d6ff"Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_local_ifac_passphraseTff7b72.Td2a8fftext Tff7b72= Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_local_ifac_passphraseTa5d6ff"Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_use_tcpTff7b72.Td2a8ffactive Tff7b72= Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_tcpTa5d6ff"Tb4b4b4]
Te6edf3con_collapse_tcpTb4b4b4(Te6edf3collapseTff7b72=Tff7b72not Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_use_tcpTff7b72.Td2a8ffactiveTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_tcp_hostTff7b72.Td2a8fftext Tff7b72= Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_tcp_hostTa5d6ff"Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_tcp_portTff7b72.Td2a8fftext Tff7b72= Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_tcp_portTa5d6ff"Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_tcp_ifac_netnameTff7b72.Td2a8fftext Tff7b72= Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_tcp_ifac_netnameTa5d6ff"Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_tcp_ifac_passphraseTff7b72.Td2a8fftext Tff7b72= Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_tcp_ifac_passphraseTa5d6ff"Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_use_i2pTff7b72.Td2a8ffactive Tff7b72= Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_i2pTa5d6ff"Tb4b4b4]
Te6edf3con_collapse_i2pTb4b4b4(Te6edf3collapseTff7b72=Tff7b72not Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_use_i2pTff7b72.Td2a8ffactiveTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_i2p_b32Tff7b72.Td2a8fftext Tff7b72= Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_i2p_b32Ta5d6ff"Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_i2p_ifac_netnameTff7b72.Td2a8fftext Tff7b72= Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_i2p_ifac_netnameTa5d6ff"Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_i2p_ifac_passphraseTff7b72.Td2a8fftext Tff7b72= Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffconfigTb4b4b4[Ta5d6ff"Ta5d6ffconnect_i2p_ifac_passphraseTa5d6ff"Tb4b4b4]
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_use_rnodeTff7b72.Td2a8ffactive Tff7b72= Tff7b72False
Te6edf3con_collapse_rnodeTb4b4b4(Te6edf3collapseTff7b72=Tff7b72not Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_use_rnodeTff7b72.Td2a8ffactiveTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_use_bluetoothTff7b72.Td2a8ffactive Tff7b72= Tff7b72False
Te6edf3con_collapse_bluetoothTb4b4b4(Te6edf3collapseTff7b72=Tff7b72not Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_use_bluetoothTff7b72.Td2a8ffactiveTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_use_modemTff7b72.Td2a8ffactive Tff7b72= Tff7b72False
Te6edf3con_collapse_modemTb4b4b4(Te6edf3collapseTff7b72=Tff7b72not Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_use_modemTff7b72.Td2a8ffactiveTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_use_localTff7b72.Td2a8ffbindTb4b4b4(Te6edf3activeTff7b72=Te6edf3save_connectivityTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_local_groupidTff7b72.Td2a8ffbindTb4b4b4(Te6edf3on_text_validateTff7b72=Te6edf3save_connectivityTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_local_ifac_netnameTff7b72.Td2a8ffbindTb4b4b4(Te6edf3on_text_validateTff7b72=Te6edf3save_connectivityTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_local_ifac_passphraseTff7b72.Td2a8ffbindTb4b4b4(Te6edf3on_text_validateTff7b72=Te6edf3save_connectivityTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_use_tcpTff7b72.Td2a8ffbindTb4b4b4(Te6edf3activeTff7b72=Te6edf3save_connectivityTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_tcp_hostTff7b72.Td2a8ffbindTb4b4b4(Te6edf3on_text_validateTff7b72=Te6edf3save_connectivityTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_tcp_portTff7b72.Td2a8ffbindTb4b4b4(Te6edf3on_text_validateTff7b72=Te6edf3save_connectivityTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_tcp_ifac_netnameTff7b72.Td2a8ffbindTb4b4b4(Te6edf3on_text_validateTff7b72=Te6edf3save_connectivityTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_tcp_ifac_passphraseTff7b72.Td2a8ffbindTb4b4b4(Te6edf3on_text_validateTff7b72=Te6edf3save_connectivityTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_use_i2pTff7b72.Td2a8ffbindTb4b4b4(Te6edf3activeTff7b72=Te6edf3save_connectivityTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_i2p_b32Tff7b72.Td2a8ffbindTb4b4b4(Te6edf3on_text_validateTff7b72=Te6edf3save_connectivityTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_i2p_ifac_netnameTff7b72.Td2a8ffbindTb4b4b4(Te6edf3on_text_validateTff7b72=Te6edf3save_connectivityTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_i2p_ifac_passphraseTff7b72.Td2a8ffbindTb4b4b4(Te6edf3on_text_validateTff7b72=Te6edf3save_connectivityTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_use_rnodeTff7b72.Td2a8ffbindTb4b4b4(Te6edf3activeTff7b72=Te6edf3save_connectivityTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_use_bluetoothTff7b72.Td2a8ffbindTb4b4b4(Te6edf3activeTff7b72=Te6edf3save_connectivityTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3info Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72if Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffreticulumTff7b72.Td2a8ffis_connected_to_shared_instanceTb4b4b4:
Te6edf3info Tff7b72= Ta5d6ff"Ta5d6ffSideband is connected via a shared Reticulum instance running on this system.Tffea00\nTffea00\nTa5d6ff"
Te6edf3info Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ffTo get connectivity status, use the rnstatus utility.Tffea00\nTffea00\nTa5d6ff"
Te6edf3info Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ffTo configure connectivity, edit the configuration file located at:Tffea00\nTffea00\nTa5d6ff"
Te6edf3info Tff7b72+Tff7b72= Tffa657strTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffReticulumTff7b72.Td2a8ffconfigpathTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3info Tff7b72= Ta5d6ff"Ta5d6ffSideband is currently running a standalone or master Reticulum instance on this system.Tffea00\nTffea00\nTa5d6ff"
Te6edf3info Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ffTo get connectivity status, use the rnstatus utility.Tffea00\nTffea00\nTa5d6ff"
Te6edf3info Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ffTo configure connectivity, edit the configuration file located at:Tffea00\nTffea00\nTa5d6ff"
Te6edf3info Tff7b72+Tff7b72= Tffa657strTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffReticulumTff7b72.Td2a8ffconfigpathTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffconnectivity_infoTff7b72.Td2a8fftext Tff7b72= Te6edf3info
Te6edf3con_hide_settingsTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffconnectivity_ready Tff7b72= Tff7b72True
Tff7b72def Td2a8ffclose_connectivity_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffopen_conversationsTb4b4b4(Te6edf3directionTff7b72=Ta5d6ff"Ta5d6ffrightTa5d6ff"Tb4b4b4)
T8b949e### Announce Stream screen
T8b949e######################################
Tff7b72def Td2a8ffinit_announces_viewTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffannounces_viewTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffannounces_view Tff7b72= Te6edf3AnnouncesTb4b4b4(Tff7b72selfTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffapp.flags.new_announcesTa5d6ff"Tb4b4b4, Tff7b72TrueTb4b4b4)
Tff7b72for Te6edf3child Tff7b72in Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffannounces_scrollviewTff7b72.Td2a8ffchildrenTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffannounces_scrollviewTff7b72.Td2a8ffremove_widgetTb4b4b4(Te6edf3childTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffannounces_scrollviewTff7b72.Td2a8ffeffect_cls Tff7b72= Te6edf3ScrollEffect
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffannounces_scrollviewTff7b72.Td2a8ffadd_widgetTb4b4b4(Tff7b72selfTff7b72.Td2a8ffannounces_viewTff7b72.Td2a8ffget_widgetTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72def Td2a8ffannounces_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8fftransitionTff7b72.Td2a8ffdirection Tff7b72= Ta5d6ff"Ta5d6ffleftTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffnav_drawerTff7b72.Td2a8ffset_stateTb4b4b4(Ta5d6ff"Ta5d6ffclosedTa5d6ff"Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffgetstateTb4b4b4(Ta5d6ff"Ta5d6ffapp.flags.new_announcesTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffinit_announces_viewTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffannounces_viewTff7b72.Td2a8ffupdateTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8ffcurrent Tff7b72= Ta5d6ff"Ta5d6ffannounces_screenTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffapp.displayingTa5d6ff"Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8ffcurrentTb4b4b4)
Tff7b72def Td2a8ffclose_announces_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffopen_conversationsTb4b4b4(Te6edf3directionTff7b72=Ta5d6ff"Ta5d6ffrightTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8ffannounce_filter_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72pass
Tff7b72def Td2a8ffscreen_transition_completeTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8ffcurrent Tff7b72== Ta5d6ff"Ta5d6ffannounces_screenTa5d6ff"Tb4b4b4:
Tff7b72pass
Tff7b72if Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8ffcurrent Tff7b72== Ta5d6ff"Ta5d6ffconversations_screenTa5d6ff"Tb4b4b4:
Tff7b72pass
T8b949e### Keys screen
T8b949e######################################
Tff7b72def Td2a8ffkeys_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
T8b949e# def link_exec(sender=None, event=None):
T8b949e# import webbrowser
T8b949e# webbrowser.open("https://unsigned.io/sideband")
T8b949e# self.root.ids.keys_info.bind(on_ref_press=link_exec)
Te6edf3info Tff7b72= Ta5d6ff"Ta5d6ffYour primary encryption keys are stored in a Reticulum Identity within the Sideband app. If you want to backup this Identity for later use on this or another device, you can export it as a plain text blob, with the key data encoded in Base32 format. This will allow you to restore your address in Sideband or other LXMF clients at a later point.Tffea00\nTffea00\nTa5d6ff[b]Warning![/b] Anyone that gets access to the key data will be able to control your LXMF address, impersonate you, and read your messages. In is [b]extremely important[/b] that you keep the Identity data secure if you export it.Tffea00\nTffea00\nTa5d6ffBefore displaying or exporting your Identity data, make sure that no machine or person in your vicinity is able to see, copy or record your device screen or similar.Ta5d6ff"
Tff7b72if Tff7b72not Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffget_platformTb4b4b4(Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffandroidTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffwidget_hideTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffkeys_shareTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffkeys_infoTff7b72.Td2a8fftext Tff7b72= Te6edf3info
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8fftransitionTff7b72.Td2a8ffdirection Tff7b72= Ta5d6ff"Ta5d6ffleftTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8ffcurrent Tff7b72= Ta5d6ff"Ta5d6ffkeys_screenTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffnav_drawerTff7b72.Td2a8ffset_stateTb4b4b4(Ta5d6ff"Ta5d6ffclosedTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffapp.displayingTa5d6ff"Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8ffcurrentTb4b4b4)
Tff7b72def Td2a8ffclose_keys_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffopen_conversationsTb4b4b4(Te6edf3directionTff7b72=Ta5d6ff"Ta5d6ffrightTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8ffidentity_display_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Te6edf3yes_button Tff7b72= Te6edf3MDFlatButtonTb4b4b4(
Te6edf3textTff7b72=Ta5d6ff"Ta5d6ffOKTa5d6ff"Tb4b4b4,
Tb4b4b4)
Te6edf3dialog Tff7b72= Te6edf3MDDialogTb4b4b4(
Te6edf3textTff7b72=Ta5d6ff"Ta5d6ffYour Identity key, in base32 format is as follows:Tffea00\nTffea00\nTa5d6ff[b]Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3base64Tff7b72.Td2a8ffb32encodeTb4b4b4(Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffidentityTff7b72.Td2a8ffget_private_keyTb4b4b4(Tb4b4b4)Tb4b4b4)Tff7b72.Td2a8ffdecodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)Tb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff[/b]Ta5d6ff"Tb4b4b4,
Te6edf3buttonsTff7b72=Tb4b4b4[ Te6edf3yes_button Tb4b4b4]Tb4b4b4,
T8b949e# elevation=0,
Tb4b4b4)
Tff7b72def Td2a8ffdl_yesTb4b4b4(Te6edf3sTb4b4b4)Tb4b4b4:
Te6edf3dialogTff7b72.Td2a8ffdismissTb4b4b4(Tb4b4b4)
Te6edf3yes_buttonTff7b72.Td2a8ffbindTb4b4b4(Te6edf3on_releaseTff7b72=Te6edf3dl_yesTb4b4b4)
Te6edf3dialogTff7b72.Td2a8ffopenTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffidentity_copy_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Te6edf3c_yes_button Tff7b72= Te6edf3MDFlatButtonTb4b4b4(Te6edf3textTff7b72=Ta5d6ff"Ta5d6ffYes, copy my keyTa5d6ff"Tb4b4b4)
Te6edf3c_no_button Tff7b72= Te6edf3MDFlatButtonTb4b4b4(Te6edf3textTff7b72=Ta5d6ff"Ta5d6ffNo, go backTa5d6ff"Tb4b4b4)
Te6edf3c_dialog Tff7b72= Te6edf3MDDialogTb4b4b4(Te6edf3textTff7b72=Ta5d6ff"Ta5d6ff[b]Caution![/b]Tffea00\nTffea00\nTa5d6ffYour Identity key will be copied to the system clipboard. Take extreme care that no untrusted app steals your key by reading the clipboard data. Clear the system clipboard immediately after pasting your key where you need it.Tffea00\nTffea00\nTa5d6ffAre you sure that you wish to proceed?Ta5d6ff"Tb4b4b4, Te6edf3buttonsTff7b72=Tb4b4b4[ Te6edf3c_no_buttonTb4b4b4, Te6edf3c_yes_button Tb4b4b4]Tb4b4b4)
Tff7b72def Td2a8ffc_dl_noTb4b4b4(Te6edf3sTb4b4b4)Tb4b4b4:
Te6edf3c_dialogTff7b72.Td2a8ffdismissTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffc_dl_yesTb4b4b4(Te6edf3sTb4b4b4)Tb4b4b4:
Te6edf3c_dialogTff7b72.Td2a8ffdismissTb4b4b4(Tb4b4b4)
Te6edf3yes_button Tff7b72= Te6edf3MDFlatButtonTb4b4b4(Te6edf3textTff7b72=Ta5d6ff"Ta5d6ffOKTa5d6ff"Tb4b4b4)
Te6edf3dialog Tff7b72= Te6edf3MDDialogTb4b4b4(Te6edf3textTff7b72=Ta5d6ff"Ta5d6ffYour Identity key was copied to the system clipboardTa5d6ff"Tb4b4b4, Te6edf3buttonsTff7b72=Tb4b4b4[ Te6edf3yes_button Tb4b4b4]Tb4b4b4)
Tff7b72def Td2a8ffdl_yesTb4b4b4(Te6edf3sTb4b4b4)Tb4b4b4:
Te6edf3dialogTff7b72.Td2a8ffdismissTb4b4b4(Tb4b4b4)
Te6edf3yes_buttonTff7b72.Td2a8ffbindTb4b4b4(Te6edf3on_releaseTff7b72=Te6edf3dl_yesTb4b4b4)
Te6edf3ClipboardTff7b72.Td2a8ffcopyTb4b4b4(Tffa657strTb4b4b4(Te6edf3base64Tff7b72.Td2a8ffb32encodeTb4b4b4(Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffidentityTff7b72.Td2a8ffget_private_keyTb4b4b4(Tb4b4b4)Tb4b4b4)Tff7b72.Td2a8ffdecodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4)
Te6edf3dialogTff7b72.Td2a8ffopenTb4b4b4(Tb4b4b4)
Te6edf3c_yes_buttonTff7b72.Td2a8ffbindTb4b4b4(Te6edf3on_releaseTff7b72=Te6edf3c_dl_yesTb4b4b4)
Te6edf3c_no_buttonTff7b72.Td2a8ffbindTb4b4b4(Te6edf3on_releaseTff7b72=Te6edf3c_dl_noTb4b4b4)
Te6edf3c_dialogTff7b72.Td2a8ffopenTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffidentity_share_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3RNSTff7b72.Td2a8ffvendorTff7b72.Td2a8ffplatformutilsTff7b72.Td2a8ffget_platformTb4b4b4(Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffandroidTa5d6ff"Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffshare_textTb4b4b4(Tffa657strTb4b4b4(Te6edf3base64Tff7b72.Td2a8ffb32encodeTb4b4b4(Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffidentityTff7b72.Td2a8ffget_private_keyTb4b4b4(Tb4b4b4)Tb4b4b4)Tff7b72.Td2a8ffdecodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4)
Tff7b72def Td2a8ffidentity_restore_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Te6edf3c_yes_button Tff7b72= Te6edf3MDFlatButtonTb4b4b4(Te6edf3textTff7b72=Ta5d6ff"Ta5d6ffYes, import the keyTa5d6ff"Tb4b4b4)
Te6edf3c_no_button Tff7b72= Te6edf3MDFlatButtonTb4b4b4(Te6edf3textTff7b72=Ta5d6ff"Ta5d6ffNo, go backTa5d6ff"Tb4b4b4)
Te6edf3c_dialog Tff7b72= Te6edf3MDDialogTb4b4b4(Te6edf3textTff7b72=Ta5d6ff"Ta5d6ff[b]Caution![/b]Tffea00\nTffea00\nTa5d6ffYou are about to import a new Identity key into Sideband. The currently active key will be irreversibly destroyed, and you will loose your LXMF address if you have not already backed up your current Identity key.Tffea00\nTffea00\nTa5d6ffAre you sure that you wish to import the key?Ta5d6ff"Tb4b4b4, Te6edf3buttonsTff7b72=Tb4b4b4[ Te6edf3c_no_buttonTb4b4b4, Te6edf3c_yes_button Tb4b4b4]Tb4b4b4)
Tff7b72def Td2a8ffc_dl_noTb4b4b4(Te6edf3sTb4b4b4)Tb4b4b4:
Te6edf3c_dialogTff7b72.Td2a8ffdismissTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffc_dl_yesTb4b4b4(Te6edf3sTb4b4b4)Tb4b4b4:
Te6edf3c_dialogTff7b72.Td2a8ffdismissTb4b4b4(Tb4b4b4)
Te6edf3b32_text Tff7b72= Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffkey_restore_textTff7b72.Td2a8fftext
Tff7b72tryTb4b4b4:
Te6edf3key_bytes Tff7b72= Te6edf3base64Tff7b72.Td2a8ffb32decodeTb4b4b4(Te6edf3b32_textTb4b4b4)
Te6edf3new_id Tff7b72= Te6edf3RNSTff7b72.Td2a8ffIdentityTff7b72.Td2a8fffrom_bytesTb4b4b4(Te6edf3key_bytesTb4b4b4)
Tff7b72if Te6edf3new_id Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3new_idTff7b72.Td2a8ffto_fileTb4b4b4(Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffidentity_pathTb4b4b4)
Te6edf3yes_button Tff7b72= Te6edf3MDFlatButtonTb4b4b4(Te6edf3textTff7b72=Ta5d6ff"Ta5d6ffOKTa5d6ff"Tb4b4b4)
Te6edf3dialog Tff7b72= Te6edf3MDDialogTb4b4b4(Te6edf3textTff7b72=Ta5d6ff"Ta5d6ff[b]The provided Identity key data was imported[/b]Tffea00\nTffea00\nTa5d6ffThe app will now exit. Please restart Sideband to use the new Identity.Ta5d6ff"Tb4b4b4, Te6edf3buttonsTff7b72=Tb4b4b4[ Te6edf3yes_button Tb4b4b4]Tb4b4b4)
Tff7b72def Td2a8ffdl_yesTb4b4b4(Te6edf3sTb4b4b4)Tb4b4b4:
Te6edf3dialogTff7b72.Td2a8ffdismissTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffquit_actionTb4b4b4(Te6edf3senderTff7b72=Tff7b72selfTb4b4b4)
Te6edf3yes_buttonTff7b72.Td2a8ffbindTb4b4b4(Te6edf3on_releaseTff7b72=Te6edf3dl_yesTb4b4b4)
Te6edf3dialogTff7b72.Td2a8ffopenTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3yes_button Tff7b72= Te6edf3MDFlatButtonTb4b4b4(Te6edf3textTff7b72=Ta5d6ff"Ta5d6ffOKTa5d6ff"Tb4b4b4)
Te6edf3dialog Tff7b72= Te6edf3MDDialogTb4b4b4(Te6edf3textTff7b72=Ta5d6ff"Ta5d6ff[b]The provided Identity key data was not valid[/b]Tffea00\nTffea00\nTa5d6ffThe error reported by Reticulum was:Tffea00\nTffea00\nTa5d6ff[i]Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff[/i]Tffea00\nTffea00\nTa5d6ffNo Identity was imported into Sideband.Ta5d6ff"Tb4b4b4, Te6edf3buttonsTff7b72=Tb4b4b4[ Te6edf3yes_button Tb4b4b4]Tb4b4b4)
Tff7b72def Td2a8ffdl_yesTb4b4b4(Te6edf3sTb4b4b4)Tb4b4b4:
Te6edf3dialogTff7b72.Td2a8ffdismissTb4b4b4(Tb4b4b4)
Te6edf3yes_buttonTff7b72.Td2a8ffbindTb4b4b4(Te6edf3on_releaseTff7b72=Te6edf3dl_yesTb4b4b4)
Te6edf3dialogTff7b72.Td2a8ffopenTb4b4b4(Tb4b4b4)
Te6edf3c_yes_buttonTff7b72.Td2a8ffbindTb4b4b4(Te6edf3on_releaseTff7b72=Te6edf3c_dl_yesTb4b4b4)
Te6edf3c_no_buttonTff7b72.Td2a8ffbindTb4b4b4(Te6edf3on_releaseTff7b72=Te6edf3c_dl_noTb4b4b4)
Te6edf3c_dialogTff7b72.Td2a8ffopenTb4b4b4(Tb4b4b4)
T8b949e### Guide screen
T8b949e######################################
Tff7b72def Td2a8ffclose_guide_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffopen_conversationsTb4b4b4(Te6edf3directionTff7b72=Ta5d6ff"Ta5d6ffrightTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8ffguide_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72def Td2a8fflink_execTb4b4b4(Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4, Te6edf3eventTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72import T7ee787webbrowser
Te6edf3webbrowserTff7b72.Td2a8ffopenTb4b4b4(Ta5d6ff"Ta5d6ffhttps://unsigned.io/sidebandTa5d6ff"Tb4b4b4)
Te6edf3guide_text Tff7b72= Ta5d6ff"""
Ta5d6ff[size=18dp][b]Introduction[/b][/size][size=5dp]Tffea00\nTa5d6ff Tffea00\nTa5d6ff[/size]Welcome to [i]Sideband[/i], an LXMF client for Android, Linux and macOS. With Sideband, you can communicate with other people or LXMF-compatible systems over Reticulum networks using LoRa, Packet Radio, WiFi, I2P, or anything else Reticulum supports.
Ta5d6ffThis short guide will give you a basic introduction to the concepts that underpin Sideband and LXMF (which is the protocol that Sideband uses to communicate). If you are not already familiar with LXMF and Reticulum, it is probably a good idea to read this guide, since Sideband is very different from other messaging apps.
Ta5d6ff[size=18dp][b]Communication Without Subjection[/b][/size][size=5dp]Tffea00\nTa5d6ff Tffea00\nTa5d6ff[/size]Sideband is completely free, permission-less, anonymous and infrastructure-less. Sideband uses the peer-to-peer and distributed messaging system LXMF. There is no sign-up, no service providers, no Ta5d6ff"Ta5d6ffend-user license agreementsTa5d6ff"Ta5d6ff, no data theft and no surveillance. You own the system.
Ta5d6ffThis also means that Sideband operates differently than what you might be used to. It does not need a connection to a server on the Internet to function, and you do not have an account anywhere.
Ta5d6ff[size=18dp][b]Operating Principles[/b][/size][size=5dp]Tffea00\nTa5d6ff Tffea00\nTa5d6ff[/size]When Sideband is started on your device for the first time, it randomly generates a set of cryptographic keys. These keys are then used to create an LXMF address for your use. Any other endpoint in [i]any[/i] Reticulum network will be able to send data to this address, as long as there is [i]some sort of physical connection[/i] between your device and the remote endpoint. You can also move around to other Reticulum networks with this address, even ones that were never connected to the network the address was created on, or that didnTa5d6ff'Ta5d6fft exist when the address was created. The address is yours to keep and control for as long (or short) a time you need it, and you can always delete it and create a new one.
Ta5d6ff[size=18dp][b]Becoming Reachable[/b][/size][size=5dp]Tffea00\nTa5d6ff Tffea00\nTa5d6ff[/size]To establish reachability for any Reticulum address on a network, an [i]announce[/i] must be sent. Sideband does not do this automatically by default, but can be configured to do so every time the program starts. To send an announce manually, press the [i]Announce[/i] button in the [i]Conversations[/i] section of the program. When you send an announce, you make your LXMF address reachable for real-time messaging to the entire network you are connected to. Even in very large networks, you can expect global reachability for your address to be established in under a minute.
Ta5d6ffIf you donTa5d6ff'Ta5d6fft move to other places in the network, and keep connected through the same hubs or gateways, it is generally not necessary to send an announce more often than once every week. If you change your entry point to the network, you may want to send an announce, or you may just want to stay quiet.
Ta5d6ff[size=18dp][b]Relax & Disconnect[/b][/size][size=5dp]Tffea00\nTa5d6ff Tffea00\nTa5d6ff[/size]If you are not connected to the network, it is still possible for other people to message you, as long as one or more [i]Propagation Nodes[/i] exist on the network. These nodes pick up and hold encrypted in-transit messages for offline users. Messages are always encrypted before leaving the originators device, and nobody else than the intended recipient can decrypt messages in transit.
Ta5d6ffThe Propagation Nodes also distribute copies of messages between each other, such that even the failure of almost every node in the network will still allow users to sync their waiting messages. If all Propagation Nodes disappear or are destroyed, users can still communicate directly. Reticulum and LXMF will degrade gracefully all the way down to single users communicating directly via long-range data radios. Anyone can start up new propagation nodes and integrate them into existing networks without permission or coordination. Even a small and cheap device like a Rasperry Pi can handle messages for millions of users. LXMF networks are designed to be quite resilient, as long as there are people using them.
Ta5d6ff[size=18dp][b]Packets Find A Way[/b][/size][size=5dp]Tffea00\nTa5d6ff Tffea00\nTa5d6ff[/size]Connections in Reticulum networks can be wired or wireless, span many intermediary hops, run over fast links or ultra-low bandwidth radio, tunnel over the Invisible Internet (I2P), private networks, satellite connections, serial lines or anything else that Reticulum can carry data over. In most cases it will not be possible to know what path data takes in a Reticulum network, and no transmitted packets carries any identifying characteristics, apart from a destination address. There is no source addresses in Reticulum. As long as you do not reveal any connecting details between your person and your LXMF address, you can remain anonymous. Sending messages to others does not reveal [i]your[/i] address to anyone else than the intended recipient.
Ta5d6ff[size=18dp][b]Be Yourself, Be Unknown, Stay Free[/b][/size][size=5dp]Tffea00\nTa5d6ff Tffea00\nTa5d6ff[/size]Even with the above characteristics in mind, you [b]must remember[/b] that LXMF and Reticulum is not a technology that can guarantee anonymising connections that are already de-anonymised! If you use Sideband to connect to TCP Reticulum hubs over the clear Internet, from a network that can be tied to your personal identity, an adversary may learn that you are generating LXMF traffic. If you want to avoid this, it is recommended to use I2P to connect to Reticulum hubs on the Internet. Or only connecting from within pure Reticulum networks, that take one or more hops to reach connections that span the Internet. This is a complex topic, with many more nuances than can not be covered here. You are encouraged to ask on the various Reticulum discussion forums if you are in doubt.
Ta5d6ffIf you use Reticulum and LXMF on hardware that does not carry any identifiers tied to you, it is possible to establish a completely free and anonymous communication system with Reticulum and LXMF clients.
Ta5d6ff[size=18dp][b]Keyboard Shortcuts[/b][/size][size=5dp]Tffea00\nTa5d6ff Tffea00\nTa5d6ff[/size] - Ctrl+Q or Ctrl-W Shut down Sideband
Ta5d6ff - Ctrl-D or Ctrl-S Send message
Ta5d6ff - Ctrl-R Show Conversations
Ta5d6ff - Ctrl-L Show Announce Stream
Ta5d6ff - Ctrl-N New conversation
Ta5d6ff - Ctrl-G Show guide
Ta5d6ff[size=18dp][b]Sow Seeds Of Freedom[/b][/size][size=5dp]Tffea00\nTa5d6ff Tffea00\nTa5d6ff[/size]It took me more than six years to design and built the entire ecosystem of software and hardware that makes this possible. If this project is valuable to you, please go to [u][ref=link]https://unsigned.io/sideband[/ref][/u] to support the project with a donation. Every donation directly makes the entire Reticulum project possible.
Ta5d6ffThank you very much for using Free Communications Systems.
Ta5d6ff"""
Te6edf3info Tff7b72= Te6edf3guide_text
Tff7b72if Tff7b72selfTff7b72.Td2a8fftheme_clsTff7b72.Td2a8fftheme_style Tff7b72== Ta5d6ff"Ta5d6ffDarkTa5d6ff"Tb4b4b4:
Te6edf3info Tff7b72= Ta5d6ff"Ta5d6ff[color=#Ta5d6ff"Tff7b72+Te6edf3dark_theme_text_colorTff7b72+Ta5d6ff"Ta5d6ff]Ta5d6ff"Tff7b72+Te6edf3infoTff7b72+Ta5d6ff"Ta5d6ff[/color]Ta5d6ff"
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffguide_infoTff7b72.Td2a8fftext Tff7b72= Te6edf3info
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffguide_infoTff7b72.Td2a8ffbindTb4b4b4(Te6edf3on_ref_pressTff7b72=Te6edf3link_execTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8fftransitionTff7b72.Td2a8ffdirection Tff7b72= Ta5d6ff"Ta5d6ffleftTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8ffcurrent Tff7b72= Ta5d6ff"Ta5d6ffguide_screenTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffnav_drawerTff7b72.Td2a8ffset_stateTb4b4b4(Ta5d6ff"Ta5d6ffclosedTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffapp.displayingTa5d6ff"Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8ffcurrentTb4b4b4)
T8b949e#################################################
T8b949e# Unimplemented Screens #
T8b949e#################################################
Tff7b72def Td2a8ffmap_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72def Td2a8fflink_execTb4b4b4(Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4, Te6edf3eventTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72import T7ee787webbrowser
Te6edf3webbrowserTff7b72.Td2a8ffopenTb4b4b4(Ta5d6ff"Ta5d6ffhttps://unsigned.io/sidebandTa5d6ff"Tb4b4b4)
Te6edf3info Tff7b72= Ta5d6ff"Ta5d6ffThe [b]Local Area[/b] feature is not yet implemented in Sideband.Tffea00\nTffea00\nTa5d6ffWant it faster? Go to [u][ref=link]https://unsigned.io/sideband[/ref][/u] to support the project.Ta5d6ff"
Tff7b72if Tff7b72selfTff7b72.Td2a8fftheme_clsTff7b72.Td2a8fftheme_style Tff7b72== Ta5d6ff"Ta5d6ffDarkTa5d6ff"Tb4b4b4:
Te6edf3info Tff7b72= Ta5d6ff"Ta5d6ff[color=#Ta5d6ff"Tff7b72+Te6edf3dark_theme_text_colorTff7b72+Ta5d6ff"Ta5d6ff]Ta5d6ff"Tff7b72+Te6edf3infoTff7b72+Ta5d6ff"Ta5d6ff[/color]Ta5d6ff"
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffmap_infoTff7b72.Td2a8fftext Tff7b72= Te6edf3info
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffmap_infoTff7b72.Td2a8ffbindTb4b4b4(Te6edf3on_ref_pressTff7b72=Te6edf3link_execTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8fftransitionTff7b72.Td2a8ffdirection Tff7b72= Ta5d6ff"Ta5d6ffleftTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8ffcurrent Tff7b72= Ta5d6ff"Ta5d6ffmap_screenTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffnav_drawerTff7b72.Td2a8ffset_stateTb4b4b4(Ta5d6ff"Ta5d6ffclosedTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffapp.displayingTa5d6ff"Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8ffcurrentTb4b4b4)
Tff7b72def Td2a8ffbroadcasts_actionTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72def Td2a8fflink_execTb4b4b4(Te6edf3senderTff7b72=Tff7b72NoneTb4b4b4, Te6edf3eventTff7b72=Tff7b72NoneTb4b4b4)Tb4b4b4:
Tff7b72import T7ee787webbrowser
Te6edf3webbrowserTff7b72.Td2a8ffopenTb4b4b4(Ta5d6ff"Ta5d6ffhttps://unsigned.io/sidebandTa5d6ff"Tb4b4b4)
Te6edf3info Tff7b72= Ta5d6ff"Ta5d6ffThe [b]Local Broadcasts[/b] feature will allow you to send and listen for local broadcast transmissions on connected radio, LoRa and WiFi interfaces.Tffea00\nTffea00\nTa5d6ff[b]Local Broadcasts[/b] makes it easy to establish public information exchange with anyone in direct radio range, or even with large areas far away using the [i]Remote Broadcast Repeater[/i] feature.Tffea00\nTffea00\nTa5d6ffThese features are not yet implemented in Sideband.Tffea00\nTffea00\nTa5d6ffWant it faster? Go to [u][ref=link]https://unsigned.io/sideband[/ref][/u] to support the project.Ta5d6ff"
Tff7b72if Tff7b72selfTff7b72.Td2a8fftheme_clsTff7b72.Td2a8fftheme_style Tff7b72== Ta5d6ff"Ta5d6ffDarkTa5d6ff"Tb4b4b4:
Te6edf3info Tff7b72= Ta5d6ff"Ta5d6ff[color=#Ta5d6ff"Tff7b72+Te6edf3dark_theme_text_colorTff7b72+Ta5d6ff"Ta5d6ff]Ta5d6ff"Tff7b72+Te6edf3infoTff7b72+Ta5d6ff"Ta5d6ff[/color]Ta5d6ff"
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffbroadcasts_infoTff7b72.Td2a8fftext Tff7b72= Te6edf3info
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffbroadcasts_infoTff7b72.Td2a8ffbindTb4b4b4(Te6edf3on_ref_pressTff7b72=Te6edf3link_execTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8fftransitionTff7b72.Td2a8ffdirection Tff7b72= Ta5d6ff"Ta5d6ffleftTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8ffcurrent Tff7b72= Ta5d6ff"Ta5d6ffbroadcasts_screenTa5d6ff"
Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffnav_drawerTff7b72.Td2a8ffset_stateTb4b4b4(Ta5d6ff"Ta5d6ffclosedTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffsidebandTff7b72.Td2a8ffsetstateTb4b4b4(Ta5d6ff"Ta5d6ffapp.displayingTa5d6ff"Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffrootTff7b72.Td2a8ffidsTff7b72.Td2a8ffscreen_managerTff7b72.Td2a8ffcurrentTb4b4b4)
Tff7b72def Td2a8ffrunTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3SidebandAppTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffrunTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72__name__ Tff7b72== Ta5d6ff"Ta5d6ff__main__Ta5d6ff"Tb4b4b4:
Te6edf3runTb4b4b4(Tb4b4b4)
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────